From 66772392ae78ef394e22070b127416b1d5b01332 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Wed, 23 Oct 2019 18:04:54 -0700 Subject: [PATCH] add lsmod parser --- changelog.txt | 1 + jc/jc.py | 5 +++++ jc/parsers/lsmod.py | 26 ++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 jc/parsers/lsmod.py diff --git a/changelog.txt b/changelog.txt index 19881397..f006c53f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,7 @@ jc changelog 2019xxxx v0.9.0 - Add jobs parser - Add lsof parser +- Add lsmod parser - No blocking if no piped data - Better help text - Clean up iptables parser code diff --git a/jc/jc.py b/jc/jc.py index 598f6dae..f9de4665 100755 --- a/jc/jc.py +++ b/jc/jc.py @@ -14,6 +14,7 @@ import jc.parsers.iptables import jc.parsers.jobs import jc.parsers.ls import jc.parsers.lsblk +import jc.parsers.lsmod import jc.parsers.lsof import jc.parsers.mount import jc.parsers.netstat @@ -33,6 +34,7 @@ def helptext(): print(' --jobs jobs parser', file=sys.stderr) print(' --ls ls parser', file=sys.stderr) print(' --lsblk lsblk parser', file=sys.stderr) + print(' --lsmod lsmod parser', file=sys.stderr) print(' --lsof lsof parser', file=sys.stderr) print(' --mount mount parser', file=sys.stderr) print(' --netstat netstat parser', file=sys.stderr) @@ -83,6 +85,9 @@ def main(): elif '--lsblk' in sys.argv: result = jc.parsers.lsblk.parse(data) + elif '--lsmod' in sys.argv: + result = jc.parsers.lsmod.parse(data) + elif '--lsof' in sys.argv: result = jc.parsers.lsof.parse(data) diff --git a/jc/parsers/lsmod.py b/jc/parsers/lsmod.py new file mode 100644 index 00000000..446f857a --- /dev/null +++ b/jc/parsers/lsmod.py @@ -0,0 +1,26 @@ +"""jc - JSON CLI output utility lsmod Parser + +Usage: + specify --lsmod as the first argument if the piped input is coming from lsmod + +Example: + + +""" + + +def parse(data): + + # code adapted from Conor Heine at: + # https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501 + + cleandata = data.splitlines() + headers = [h for h in ' '.join(cleandata[0].strip().split()).split() if h] + + raw_data = map(lambda s: s.strip().split(None, len(headers) - 1), cleandata[1:]) + output = [dict(zip(headers, r)) for r in raw_data] + + for entry in output: + entry['NAME'] = entry['NAME'].encode('ascii', errors='ignore').decode() + + return output