From 41cd489c34502c42602bf64086670ba3b2b8e14b Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 24 Oct 2019 17:09:32 -0700 Subject: [PATCH] add history and uptime parsers --- README.md | 46 +++++++++++++++++++++++++++++++++++++++++++ changelog.txt | 3 +++ jc/jc.py | 10 ++++++++++ jc/parsers/history.py | 32 ++++++++++++++++++++++++++++++ jc/parsers/uptime.py | 35 ++++++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 jc/parsers/history.py create mode 100644 jc/parsers/uptime.py diff --git a/README.md b/README.md index 5f8de637..2242d0e6 100755 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ jc [parser] [options] - `--df` enables the `df` parser - `--env` enables the `env` parser - `--free` enables the `free` parser +- `--history` enables the `history` parser - `--ifconfig` enables the `ifconfig` parser - `--iptables` enables the `iptables` parser - `--jobs` enables the `jobs` parser @@ -75,6 +76,7 @@ jc [parser] [options] - `--ps` enables the `ps` parser - `--route` enables the `route` parser - `--uname` enables the `uname -a` parser +- `--uptime` enables the `uptime` parser - `--w` enables the `w` parser ### Options @@ -135,6 +137,38 @@ $ env | jc --env -p "_": "/usr/bin/env" } ``` +### free +``` +$ free | jc --free -p +[ + { + "type": "Mem", + "total": "2017300", + "used": "213104", + "free": "1148452", + "shared": "1176", + "buff/cache": "655744", + "available": "1622204" + }, + { + "type": "Swap", + "total": "2097148", + "used": "0", + "free": "2097148" + } +] +``` +### history +``` +$ history | jc --history -p +{ + "118": "sleep 100", + "119": "ls /bin", + "120": "echo \"hello\"", + "121": "docker images", + ... +} +``` ### ifconfig ``` $ ifconfig | jc --ifconfig -p @@ -1043,6 +1077,18 @@ $ uname -a | jc --uname -p "kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019" } ``` +### uptime +``` +$ uptime | jc --uptime -p +{ + "time": "16:52", + "uptime": "3 days, 4:49", + "users": "5", + "load_1m": "1.85", + "load_5m": "1.90", + "load_15m": "1.91" +} +``` ### w ``` $ w | jc --w -p diff --git a/changelog.txt b/changelog.txt index c5ef7236..727baabd 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,9 @@ jc changelog 2019xxxx v1.0.1 +- Add w parser +- Add uptime parser +- Add free parser - Fix env parser 20191023 v0.9.1 diff --git a/jc/jc.py b/jc/jc.py index 3f77d3a2..be169920 100755 --- a/jc/jc.py +++ b/jc/jc.py @@ -9,6 +9,7 @@ import json import jc.parsers.df import jc.parsers.env import jc.parsers.free +import jc.parsers.history import jc.parsers.ifconfig import jc.parsers.iptables import jc.parsers.jobs @@ -21,6 +22,7 @@ import jc.parsers.netstat import jc.parsers.ps import jc.parsers.route import jc.parsers.uname +import jc.parsers.uptime import jc.parsers.w @@ -30,6 +32,7 @@ def helptext(): print(' --df df parser', file=sys.stderr) print(' --env env parser', file=sys.stderr) print(' --free free parser', file=sys.stderr) + print(' --history history parser', file=sys.stderr) print(' --ifconfig iconfig parser', file=sys.stderr) print(' --iptables iptables parser', file=sys.stderr) print(' --jobs jobs parser', file=sys.stderr) @@ -42,6 +45,7 @@ def helptext(): print(' --ps ps parser', file=sys.stderr) print(' --route route parser', file=sys.stderr) print(' --uname uname parser', file=sys.stderr) + print(' --uptime uptime parser', file=sys.stderr) print(' --w w parser\n', file=sys.stderr) print('Options:', file=sys.stderr) print(' -p pretty print output\n', file=sys.stderr) @@ -72,6 +76,9 @@ def main(): elif '--free' in sys.argv: result = jc.parsers.free.parse(data) + elif '--history' in sys.argv: + result = jc.parsers.history.parse(data) + elif '--ifconfig' in sys.argv: result = jc.parsers.ifconfig.parse(data) @@ -108,6 +115,9 @@ def main(): elif '--uname' in sys.argv: result = jc.parsers.uname.parse(data) + elif '--uptime' in sys.argv: + result = jc.parsers.uptime.parse(data) + elif '--w' in sys.argv: result = jc.parsers.w.parse(data) diff --git a/jc/parsers/history.py b/jc/parsers/history.py new file mode 100644 index 00000000..2c168282 --- /dev/null +++ b/jc/parsers/history.py @@ -0,0 +1,32 @@ +"""jc - JSON CLI output utility history Parser + +Usage: + specify --history as the first argument if the piped input is coming from history + +Example: + +$ history | jc --history -p +{ + "118": "sleep 100", + "119": "ls /bin", + "120": "echo \"hello\"", + "121": "docker images", + ... +} +""" + + +def parse(data): + output = {} + + linedata = data.splitlines() + + # Clear any blank lines + cleandata = list(filter(None, linedata)) + + if cleandata: + for entry in cleandata: + parsed_line = entry.split(maxsplit=1) + output[parsed_line[0]] = parsed_line[1] + + return output diff --git a/jc/parsers/uptime.py b/jc/parsers/uptime.py new file mode 100644 index 00000000..7116021a --- /dev/null +++ b/jc/parsers/uptime.py @@ -0,0 +1,35 @@ +"""jc - JSON CLI output utility uptime Parser + +Usage: + specify --uptime as the first argument if the piped input is coming from uptime + +Example: + +$ uptime | jc --uptime -p +{ + "time": "16:52", + "uptime": "3 days, 4:49", + "users": "5", + "load_1m": "1.85", + "load_5m": "1.90", + "load_15m": "1.91" +} +""" + + +def parse(data): + output = {} + + cleandata = data.splitlines() + + if cleandata: + parsed_line = cleandata[0].split() + + output['time'] = parsed_line[0] + output['uptime'] = ' '.join(parsed_line[2:5]).rstrip(',') + output['users'] = parsed_line[5] + output['load_1m'] = parsed_line[9] + output['load_5m'] = parsed_line[10] + output['load_15m'] = parsed_line[11] + + return output