diff --git a/README.md b/README.md index 4a99dd4a..d4a8a8f2 100755 --- a/README.md +++ b/README.md @@ -70,6 +70,7 @@ jc [parser] [options] - `--netstat` enables the `netstat` parser - `--ps` enables the `ps` parser - `--route` enables the `route` parser +- `--uname` enables the `uname -a` parser ### Options - `-p` specifies whether to pretty format the JSON output @@ -561,6 +562,20 @@ $ route -n | jc --route -p } ] ``` +### uname -a +``` +$ uname -a | jc --uname -p +{ + "kernel_name": "Linux", + "node_name": "user-ubuntu", + "kernel_release": "4.15.0-65-generic", + "operating_system": "GNU/Linux", + "hardware_platform": "x86_64", + "processor": "x86_64", + "machine": "x86_64", + "kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019" +} +``` ## Contributions Feel free to add/improve code or parsers! diff --git a/changelog.txt b/changelog.txt index 3fbd06a9..3a0e042f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -6,6 +6,7 @@ jc changelog - Add free parser - Add lsblk parser - Add mount parser +- Add uname parser 20191021 v0.6.4 - Flatten netstat parser output diff --git a/jc/jc.py b/jc/jc.py index 4585292a..e242f613 100755 --- a/jc/jc.py +++ b/jc/jc.py @@ -16,6 +16,7 @@ import jc.parsers.mount import jc.parsers.netstat import jc.parsers.ps import jc.parsers.route +import jc.parsers.uname def main(): @@ -55,6 +56,9 @@ def main(): elif '--route' in sys.argv: result = jc.parsers.route.parse(data) + elif '--uname' in sys.argv: + result = jc.parsers.uname.parse(data) + else: print('jc: missing arguments\n', file=sys.stderr) print('Usage: jc [parser] [options]\n', file=sys.stderr) @@ -68,7 +72,8 @@ def main(): print(' --mount mount parser', file=sys.stderr) print(' --netstat netstat parser', file=sys.stderr) print(' --ps ps parser', file=sys.stderr) - print(' --route route parser\n', file=sys.stderr) + print(' --route route parser', file=sys.stderr) + print(' --uname uname parser\n', file=sys.stderr) print('Options:', file=sys.stderr) print(' -p pretty print output\n', file=sys.stderr) print('Example:', file=sys.stderr) diff --git a/jc/parsers/uname.py b/jc/parsers/uname.py new file mode 100644 index 00000000..892ec042 --- /dev/null +++ b/jc/parsers/uname.py @@ -0,0 +1,42 @@ +"""jc - JSON CLI output utility uname Parser + +Usage: + specify --uname as the first argument if the piped input is coming from uname + +Limitations: + must use 'uname -a' + +Example: + +$ uname -a | jc --uname -p +{ + "kernel_name": "Linux", + "node_name": "user-ubuntu", + "kernel_release": "4.15.0-65-generic", + "operating_system": "GNU/Linux", + "hardware_platform": "x86_64", + "processor": "x86_64", + "machine": "x86_64", + "kernel_version": "#74-Ubuntu SMP Tue Sep 17 17:06:04 UTC 2019" +} +""" + + +def parse(data): + output = {} + parsed_line = data.split(maxsplit=3) + + output['kernel_name'] = parsed_line.pop(0) + output['node_name'] = parsed_line.pop(0) + output['kernel_release'] = parsed_line.pop(0) + + parsed_line = parsed_line[-1].rsplit(maxsplit=4) + + output['operating_system'] = parsed_line.pop(-1) + output['hardware_platform'] = parsed_line.pop(-1) + output['processor'] = parsed_line.pop(-1) + output['machine'] = parsed_line.pop(-1) + + output['kernel_version'] = parsed_line.pop(0) + + return output