mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-06-17 00:07:37 +02:00
move utils to own module and add quiet mode
This commit is contained in:
107
jc/jc.py
107
jc/jc.py
@ -7,7 +7,7 @@ Main input module
|
|||||||
import sys
|
import sys
|
||||||
import signal
|
import signal
|
||||||
import json
|
import json
|
||||||
import textwrap
|
from jc.utils import *
|
||||||
import jc.parsers.arp
|
import jc.parsers.arp
|
||||||
import jc.parsers.df
|
import jc.parsers.df
|
||||||
import jc.parsers.dig
|
import jc.parsers.dig
|
||||||
@ -30,67 +30,6 @@ import jc.parsers.uptime
|
|||||||
import jc.parsers.w
|
import jc.parsers.w
|
||||||
|
|
||||||
|
|
||||||
def ctrlc(signum, frame):
|
|
||||||
exit()
|
|
||||||
|
|
||||||
|
|
||||||
def helptext(message):
|
|
||||||
helptext_string = f'''
|
|
||||||
jc: {message}
|
|
||||||
|
|
||||||
Usage: jc PARSER [OPTIONS]
|
|
||||||
|
|
||||||
Parsers:
|
|
||||||
--arp arp parser
|
|
||||||
--df df parser
|
|
||||||
--dig dig parser
|
|
||||||
--env env parser
|
|
||||||
--free free parser
|
|
||||||
--history history parser
|
|
||||||
--ifconfig iconfig parser
|
|
||||||
--iptables iptables parser
|
|
||||||
--jobs jobs parser
|
|
||||||
--ls ls parser
|
|
||||||
--lsblk lsblk parser
|
|
||||||
--lsmod lsmod parser
|
|
||||||
--lsof lsof parser
|
|
||||||
--mount mount parser
|
|
||||||
--netstat netstat parser
|
|
||||||
--ps ps parser
|
|
||||||
--route route parser
|
|
||||||
--uname uname parser
|
|
||||||
--uptime uptime parser
|
|
||||||
--w w parser
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-p pretty print output
|
|
||||||
-r raw JSON output
|
|
||||||
|
|
||||||
Example:
|
|
||||||
ls -al | jc --ls -p
|
|
||||||
'''
|
|
||||||
|
|
||||||
print(textwrap.dedent(helptext_string), file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def error_message(message):
|
|
||||||
error_string = f'''
|
|
||||||
jc: {message}
|
|
||||||
'''
|
|
||||||
|
|
||||||
print(textwrap.dedent(error_string), file=sys.stderr)
|
|
||||||
|
|
||||||
|
|
||||||
def compatibility(mod_name, compatible):
|
|
||||||
'''
|
|
||||||
compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
|
||||||
'''
|
|
||||||
if sys.platform not in compatible:
|
|
||||||
mod = mod_name.split('.')[-1]
|
|
||||||
compat_list = ', '.join(compatible)
|
|
||||||
error_message(f'Warning - {mod} parser not compatible with your OS ({sys.platform}).\n Compatible platforms: {compat_list}')
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
signal.signal(signal.SIGINT, ctrlc)
|
signal.signal(signal.SIGINT, ctrlc)
|
||||||
|
|
||||||
@ -100,75 +39,79 @@ def main():
|
|||||||
|
|
||||||
data = sys.stdin.read()
|
data = sys.stdin.read()
|
||||||
pretty = False
|
pretty = False
|
||||||
|
quiet = False
|
||||||
raw = False
|
raw = False
|
||||||
|
|
||||||
# options
|
# options
|
||||||
if '-p' in sys.argv:
|
if '-p' in sys.argv:
|
||||||
pretty = True
|
pretty = True
|
||||||
|
|
||||||
|
if '-q' in sys.argv:
|
||||||
|
quiet = True
|
||||||
|
|
||||||
if '-r' in sys.argv:
|
if '-r' in sys.argv:
|
||||||
raw = True
|
raw = True
|
||||||
|
|
||||||
# parsers
|
# parsers
|
||||||
if '--arp' in sys.argv:
|
if '--arp' in sys.argv:
|
||||||
result = jc.parsers.arp.parse(data, raw=raw)
|
result = jc.parsers.arp.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--df' in sys.argv:
|
elif '--df' in sys.argv:
|
||||||
result = jc.parsers.df.parse(data, raw=raw)
|
result = jc.parsers.df.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--dig' in sys.argv:
|
elif '--dig' in sys.argv:
|
||||||
result = jc.parsers.dig.parse(data, raw=raw)
|
result = jc.parsers.dig.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--env' in sys.argv:
|
elif '--env' in sys.argv:
|
||||||
result = jc.parsers.env.parse(data, raw=raw)
|
result = jc.parsers.env.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--free' in sys.argv:
|
elif '--free' in sys.argv:
|
||||||
result = jc.parsers.free.parse(data, raw=raw)
|
result = jc.parsers.free.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--history' in sys.argv:
|
elif '--history' in sys.argv:
|
||||||
result = jc.parsers.history.parse(data, raw=raw)
|
result = jc.parsers.history.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--ifconfig' in sys.argv:
|
elif '--ifconfig' in sys.argv:
|
||||||
result = jc.parsers.ifconfig.parse(data, raw=raw)
|
result = jc.parsers.ifconfig.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--iptables' in sys.argv:
|
elif '--iptables' in sys.argv:
|
||||||
result = jc.parsers.iptables.parse(data, raw=raw)
|
result = jc.parsers.iptables.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--jobs' in sys.argv:
|
elif '--jobs' in sys.argv:
|
||||||
result = jc.parsers.jobs.parse(data, raw=raw)
|
result = jc.parsers.jobs.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--ls' in sys.argv:
|
elif '--ls' in sys.argv:
|
||||||
result = jc.parsers.ls.parse(data, raw=raw)
|
result = jc.parsers.ls.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--lsblk' in sys.argv:
|
elif '--lsblk' in sys.argv:
|
||||||
result = jc.parsers.lsblk.parse(data, raw=raw)
|
result = jc.parsers.lsblk.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--lsmod' in sys.argv:
|
elif '--lsmod' in sys.argv:
|
||||||
result = jc.parsers.lsmod.parse(data, raw=raw)
|
result = jc.parsers.lsmod.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--lsof' in sys.argv:
|
elif '--lsof' in sys.argv:
|
||||||
result = jc.parsers.lsof.parse(data, raw=raw)
|
result = jc.parsers.lsof.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--mount' in sys.argv:
|
elif '--mount' in sys.argv:
|
||||||
result = jc.parsers.mount.parse(data, raw=raw)
|
result = jc.parsers.mount.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--netstat' in sys.argv:
|
elif '--netstat' in sys.argv:
|
||||||
result = jc.parsers.netstat.parse(data, raw=raw)
|
result = jc.parsers.netstat.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--ps' in sys.argv:
|
elif '--ps' in sys.argv:
|
||||||
result = jc.parsers.ps.parse(data, raw=raw)
|
result = jc.parsers.ps.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--route' in sys.argv:
|
elif '--route' in sys.argv:
|
||||||
result = jc.parsers.route.parse(data, raw=raw)
|
result = jc.parsers.route.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--uname' in sys.argv:
|
elif '--uname' in sys.argv:
|
||||||
result = jc.parsers.uname.parse(data, raw=raw)
|
result = jc.parsers.uname.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--uptime' in sys.argv:
|
elif '--uptime' in sys.argv:
|
||||||
result = jc.parsers.uptime.parse(data, raw=raw)
|
result = jc.parsers.uptime.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
elif '--w' in sys.argv:
|
elif '--w' in sys.argv:
|
||||||
result = jc.parsers.w.parse(data, raw=raw)
|
result = jc.parsers.w.parse(data, raw=raw, quiet=quiet)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
helptext('missing or incorrect arguments')
|
helptext('missing or incorrect arguments')
|
||||||
|
@ -78,7 +78,7 @@ $ arp -a | jc --arp -p -r
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
import jc
|
from jc.utils import *
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def process(proc_data):
|
||||||
@ -103,10 +103,12 @@ def process(proc_data):
|
|||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def parse(data, raw=False):
|
def parse(data, raw=False, quiet=False):
|
||||||
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
||||||
jc.jc.compatibility(__name__,
|
compatible = ['linux', 'aix', 'freebsd']
|
||||||
['linux', 'aix', 'freebsd'])
|
|
||||||
|
if not quiet:
|
||||||
|
compatibility(__name__, compatible)
|
||||||
|
|
||||||
# code adapted from Conor Heine at:
|
# code adapted from Conor Heine at:
|
||||||
# https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501
|
# https://gist.github.com/cahna/43a1a3ff4d075bcd71f9d7120037a501
|
||||||
|
@ -63,7 +63,7 @@ $ df | jc --df -p -r
|
|||||||
...
|
...
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
import jc
|
from jc.utils import *
|
||||||
|
|
||||||
|
|
||||||
def process(proc_data):
|
def process(proc_data):
|
||||||
@ -107,10 +107,12 @@ def process(proc_data):
|
|||||||
return proc_data
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
def parse(data, raw=False):
|
def parse(data, raw=False, quiet=False):
|
||||||
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
# compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
||||||
jc.jc.compatibility(__name__,
|
compatible = ['linux']
|
||||||
['linux'])
|
|
||||||
|
if not quiet:
|
||||||
|
compatibility(__name__, compatible)
|
||||||
|
|
||||||
cleandata = data.splitlines()
|
cleandata = data.splitlines()
|
||||||
fix_headers = cleandata[0].lower().replace('avail ', 'available ')
|
fix_headers = cleandata[0].lower().replace('avail ', 'available ')
|
||||||
|
65
jc/utils.py
Normal file
65
jc/utils.py
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
"""jc - JSON CLI output utility utils"""
|
||||||
|
import textwrap
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def ctrlc(signum, frame):
|
||||||
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
def helptext(message):
|
||||||
|
helptext_string = f'''
|
||||||
|
jc: {message}
|
||||||
|
|
||||||
|
Usage: jc PARSER [OPTIONS]
|
||||||
|
|
||||||
|
Parsers:
|
||||||
|
--arp arp parser
|
||||||
|
--df df parser
|
||||||
|
--dig dig parser
|
||||||
|
--env env parser
|
||||||
|
--free free parser
|
||||||
|
--history history parser
|
||||||
|
--ifconfig iconfig parser
|
||||||
|
--iptables iptables parser
|
||||||
|
--jobs jobs parser
|
||||||
|
--ls ls parser
|
||||||
|
--lsblk lsblk parser
|
||||||
|
--lsmod lsmod parser
|
||||||
|
--lsof lsof parser
|
||||||
|
--mount mount parser
|
||||||
|
--netstat netstat parser
|
||||||
|
--ps ps parser
|
||||||
|
--route route parser
|
||||||
|
--uname uname parser
|
||||||
|
--uptime uptime parser
|
||||||
|
--w w parser
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-p pretty print output
|
||||||
|
-q quiet - suppress warnings
|
||||||
|
-r raw JSON output
|
||||||
|
|
||||||
|
Example:
|
||||||
|
ls -al | jc --ls -p
|
||||||
|
'''
|
||||||
|
|
||||||
|
print(textwrap.dedent(helptext_string), file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
def error_message(message):
|
||||||
|
error_string = f'''
|
||||||
|
jc: {message}
|
||||||
|
'''
|
||||||
|
|
||||||
|
print(textwrap.dedent(error_string), file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
def compatibility(mod_name, compatible):
|
||||||
|
'''
|
||||||
|
compatible options: linux, darwin, cygwin, win32, aix, freebsd
|
||||||
|
'''
|
||||||
|
if sys.platform not in compatible:
|
||||||
|
mod = mod_name.split('.')[-1]
|
||||||
|
compat_list = ', '.join(compatible)
|
||||||
|
error_message(f'Warning - {mod} parser not compatible with your OS ({sys.platform}).\n Compatible platforms: {compat_list}')
|
Reference in New Issue
Block a user