From 6ad7891b2b34fae1a366568e4eba86e886a6dd84 Mon Sep 17 00:00:00 2001 From: Kelly Brazil Date: Thu, 7 Nov 2019 18:54:52 -0800 Subject: [PATCH] process uptime data --- jc/parsers/uptime.py | 73 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/jc/parsers/uptime.py b/jc/parsers/uptime.py index 75c3f199..314b75d1 100644 --- a/jc/parsers/uptime.py +++ b/jc/parsers/uptime.py @@ -7,17 +7,59 @@ 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" + "time": "11:30:44", + "uptime": "1 day, 21:17", + "users": 1, + "load_1m": 0.01, + "load_5m": 0.04, + "load_15m": 0.05 +} + +$ uptime | jc --uptime -p -r +{ + "time": "11:31:09", + "uptime": "1 day, 21:17", + "users": "1", + "load_1m": "0.00", + "load_5m": "0.04", + "load_15m": "0.05" } """ import jc.utils +def process(proc_data): + '''schema: + { + "time": string, + "uptime": string, + "users": integer, + "load_1m": float, + "load_5m": float, + "load_15m": float + } + ''' + int_list = ['users'] + for key in int_list: + if key in proc_data: + try: + key_int = int(proc_data[key]) + proc_data[key] = key_int + except (ValueError): + proc_data[key] = None + + float_list = ['load_1m', 'load_5m', 'load_15m'] + for key in float_list: + if key in proc_data: + try: + key_float = float(proc_data[key]) + proc_data[key] = key_float + except (ValueError): + proc_data[key] = None + + return proc_data + + def parse(data, raw=False, quiet=False): # compatible options: linux, darwin, cygwin, win32, aix, freebsd compatible = ['linux', 'darwin', 'cygwin', 'aix', 'freebsd'] @@ -25,7 +67,7 @@ def parse(data, raw=False, quiet=False): if not quiet: jc.utils.compatibility(__name__, compatible) - output = {} + raw_output = {} cleandata = data.splitlines() @@ -42,11 +84,14 @@ def parse(data, raw=False, quiet=False): marker = i + 2 break - output['time'] = parsed_line[0] - output['uptime'] = ' '.join(parsed_line[marker:13]).lstrip().rstrip(',') - output['users'] = parsed_line[13] - output['load_1m'] = parsed_line[17].rstrip(',') - output['load_5m'] = parsed_line[18].rstrip(',') - output['load_15m'] = parsed_line[19] + raw_output['time'] = parsed_line[0] + raw_output['uptime'] = ' '.join(parsed_line[marker:13]).lstrip().rstrip(',') + raw_output['users'] = parsed_line[13] + raw_output['load_1m'] = parsed_line[17].rstrip(',') + raw_output['load_5m'] = parsed_line[18].rstrip(',') + raw_output['load_15m'] = parsed_line[19] - return output + if raw: + return raw_output + else: + return process(raw_output)