diff --git a/docs/parsers/systemctl_lj.md b/docs/parsers/systemctl_lj.md index ca9fc5d1..72a5a4af 100644 --- a/docs/parsers/systemctl_lj.md +++ b/docs/parsers/systemctl_lj.md @@ -100,4 +100,4 @@ Returns: ## Parser Information Compatibility: linux -Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/time.md b/docs/parsers/time.md index b1d5a6a0..cc8468bd 100644 --- a/docs/parsers/time.md +++ b/docs/parsers/time.md @@ -148,4 +148,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd -Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/timedatectl.md b/docs/parsers/timedatectl.md index f6628b22..9d740a5a 100644 --- a/docs/parsers/timedatectl.md +++ b/docs/parsers/timedatectl.md @@ -88,4 +88,4 @@ Returns: ## Parser Information Compatibility: linux -Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/tracepath.md b/docs/parsers/tracepath.md index 64791ef6..b4ab6b43 100644 --- a/docs/parsers/tracepath.md +++ b/docs/parsers/tracepath.md @@ -156,4 +156,4 @@ Returns: ## Parser Information Compatibility: linux -Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/traceroute.md b/docs/parsers/traceroute.md index 099f4f35..e29dd8b8 100644 --- a/docs/parsers/traceroute.md +++ b/docs/parsers/traceroute.md @@ -142,4 +142,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, freebsd -Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/upower.md b/docs/parsers/upower.md index 91e174da..6156d1e6 100644 --- a/docs/parsers/upower.md +++ b/docs/parsers/upower.md @@ -219,4 +219,4 @@ Returns: ## Parser Information Compatibility: linux -Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/uptime.md b/docs/parsers/uptime.md index 146016e7..1fe63384 100644 --- a/docs/parsers/uptime.md +++ b/docs/parsers/uptime.md @@ -90,4 +90,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd -Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.5 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/wc.md b/docs/parsers/wc.md index 3bc1f5ab..130ef740 100644 --- a/docs/parsers/wc.md +++ b/docs/parsers/wc.md @@ -79,4 +79,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd -Version 1.1 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.2 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/parsers/who.md b/docs/parsers/who.md index 8a4f7f40..f694220e 100644 --- a/docs/parsers/who.md +++ b/docs/parsers/who.md @@ -157,4 +157,4 @@ Returns: ## Parser Information Compatibility: linux, darwin, cygwin, aix, freebsd -Version 1.3 by Kelly Brazil (kellyjonbrazil@gmail.com) +Version 1.4 by Kelly Brazil (kellyjonbrazil@gmail.com) diff --git a/docs/utils.md b/docs/utils.md index 60bd45cc..e245fd8c 100644 --- a/docs/utils.md +++ b/docs/utils.md @@ -78,7 +78,7 @@ Converts string input to integer by stripping all non-numeric characters Parameters: - value: (string) Input value + value: (string/integer/float) Input value Returns: diff --git a/jc/parsers/acpi.py b/jc/parsers/acpi.py index 59d09191..2125c38e 100644 --- a/jc/parsers/acpi.py +++ b/jc/parsers/acpi.py @@ -256,25 +256,18 @@ def _process(proc_data): float_list = ['temperature'] for entry in proc_data: - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) - - if 'trip_points' in entry: - for tp in entry['trip_points']: - for key in int_list: - if key in tp: - tp[key] = jc.utils.convert_to_int(tp[key]) - - for entry in proc_data: - for key in float_list: - if key in entry: + if key in float_list: entry[key] = jc.utils.convert_to_float(entry[key]) if 'trip_points' in entry: for tp in entry['trip_points']: - for key in float_list: - if key in tp: + for key in tp: + if key in int_list: + tp[key] = jc.utils.convert_to_int(tp[key]) + if key in float_list: tp[key] = jc.utils.convert_to_float(tp[key]) for entry in proc_data: diff --git a/jc/parsers/airport_s.py b/jc/parsers/airport_s.py index 3ae4aef9..28ccc380 100644 --- a/jc/parsers/airport_s.py +++ b/jc/parsers/airport_s.py @@ -137,15 +137,12 @@ def _process(proc_data): """ for entry in proc_data: - # integers + # convert integers and booleans int_list = ['rssi'] - for key in int_list: - if key in entry: - entry[key] = jc.utils.convert_to_int(entry[key]) - - # booleans bool_list = ['ht'] for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) if key in bool_list: entry[key] = jc.utils.convert_to_bool(entry[key]) diff --git a/jc/parsers/arp.py b/jc/parsers/arp.py index 896e37c4..fe45ea2b 100644 --- a/jc/parsers/arp.py +++ b/jc/parsers/arp.py @@ -150,8 +150,8 @@ def _process(proc_data): entry['name'] = None int_list = ['expires'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/blkid.py b/jc/parsers/blkid.py index 0153efc7..6c4d7ab1 100644 --- a/jc/parsers/blkid.py +++ b/jc/parsers/blkid.py @@ -155,8 +155,8 @@ def _process(proc_data): 'id_part_entry_offset', 'id_part_entry_size', 'minimum_io_size', 'physical_sector_size', 'logical_sector_size', 'id_iolimit_minimum_io_size', 'id_iolimit_physical_sector_size', 'id_iolimit_logical_sector_size'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/cksum.py b/jc/parsers/cksum.py index b3150f6e..541abb82 100644 --- a/jc/parsers/cksum.py +++ b/jc/parsers/cksum.py @@ -82,8 +82,8 @@ def _process(proc_data): for entry in proc_data: int_list = ['checksum', 'blocks'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/df.py b/jc/parsers/df.py index 714c4ae4..2fc61246 100644 --- a/jc/parsers/df.py +++ b/jc/parsers/df.py @@ -158,8 +158,8 @@ def _process(proc_data): # change used, available, use_percent, capacity_percent, ifree, iused, iused_percent to int int_list = ['used', 'available', 'use_percent', 'capacity_percent', 'ifree', 'iused', 'iused_percent'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/dig.py b/jc/parsers/dig.py index 4ceccfea..323998cd 100644 --- a/jc/parsers/dig.py +++ b/jc/parsers/dig.py @@ -304,8 +304,8 @@ def _process(proc_data): for entry in proc_data: int_list = ['id', 'query_num', 'answer_num', 'authority_num', 'additional_num', 'rcvd', 'query_size', 'query_time'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if 'axfr' in entry: diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py index 19fae60a..851f93d7 100644 --- a/jc/parsers/dir.py +++ b/jc/parsers/dir.py @@ -155,8 +155,8 @@ def _process(proc_data): # add ints int_list = ["size"] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/dmidecode.py b/jc/parsers/dmidecode.py index 5c7e6971..b03dfff7 100644 --- a/jc/parsers/dmidecode.py +++ b/jc/parsers/dmidecode.py @@ -153,8 +153,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['type', 'bytes'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if not entry['values']: diff --git a/jc/parsers/du.py b/jc/parsers/du.py index d5dd592e..5774f615 100644 --- a/jc/parsers/du.py +++ b/jc/parsers/du.py @@ -116,8 +116,8 @@ def _process(proc_data): """ int_list = ['size'] for entry in proc_data: - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/free.py b/jc/parsers/free.py index c8fcc116..b1d4db9d 100644 --- a/jc/parsers/free.py +++ b/jc/parsers/free.py @@ -101,8 +101,8 @@ def _process(proc_data): for entry in proc_data: int_list = ['total', 'used', 'free', 'shared', 'buff_cache', 'available'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/fstab.py b/jc/parsers/fstab.py index 4620a4f6..d7522c75 100644 --- a/jc/parsers/fstab.py +++ b/jc/parsers/fstab.py @@ -111,8 +111,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['fs_freq', 'fs_passno'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/group.py b/jc/parsers/group.py index 22ba0e66..fe554df9 100644 --- a/jc/parsers/group.py +++ b/jc/parsers/group.py @@ -136,8 +136,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['gid'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if entry['members'] == ['']: diff --git a/jc/parsers/hash.py b/jc/parsers/hash.py index f73ac0fa..2fd7d0d4 100644 --- a/jc/parsers/hash.py +++ b/jc/parsers/hash.py @@ -64,8 +64,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['hits'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/hciconfig.py b/jc/parsers/hciconfig.py index 27801b38..70d247fe 100644 --- a/jc/parsers/hciconfig.py +++ b/jc/parsers/hciconfig.py @@ -348,8 +348,8 @@ def _process(proc_data): int_list = ['acl_mtu', 'acl_mtu_packets', 'sco_mtu', 'sco_mtu_packets', 'rx_bytes', 'rx_acl', 'rx_sco', 'rx_events', 'rx_errors', 'tx_bytes', 'tx_acl', 'tx_sco', 'tx_commands', 'tx_errors'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if 'service_classes' in entry and len(entry['service_classes']) == 1 and 'Unspecified' in entry['service_classes']: diff --git a/jc/parsers/ifconfig.py b/jc/parsers/ifconfig.py index c45b60fb..bd73cfde 100644 --- a/jc/parsers/ifconfig.py +++ b/jc/parsers/ifconfig.py @@ -434,8 +434,8 @@ def _process(proc_data): int_list = ['flags', 'mtu', 'ipv6_mask', 'rx_packets', 'rx_bytes', 'rx_errors', 'rx_dropped', 'rx_overruns', 'rx_frame', 'tx_packets', 'tx_bytes', 'tx_errors', 'tx_dropped', 'tx_overruns', 'tx_carrier', 'tx_collisions', 'metric'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) # convert OSX-style subnet mask to dotted quad diff --git a/jc/parsers/iptables.py b/jc/parsers/iptables.py index 110de268..e59e6fa7 100644 --- a/jc/parsers/iptables.py +++ b/jc/parsers/iptables.py @@ -191,8 +191,8 @@ def _process(proc_data): for entry in proc_data: for rule in entry['rules']: int_list = ['num', 'pkts'] - for key in int_list: - if key in rule: + for key in rule: + if key in int_list: rule[key] = jc.utils.convert_to_int(rule[key]) if 'bytes' in rule: diff --git a/jc/parsers/jobs.py b/jc/parsers/jobs.py index 42ba7aab..b33154f5 100644 --- a/jc/parsers/jobs.py +++ b/jc/parsers/jobs.py @@ -122,8 +122,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['job_number', 'pid'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/ls.py b/jc/parsers/ls.py index 691657af..c0c6ce6c 100644 --- a/jc/parsers/ls.py +++ b/jc/parsers/ls.py @@ -134,8 +134,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['links', 'size'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if 'date' in entry: diff --git a/jc/parsers/lsblk.py b/jc/parsers/lsblk.py index cd09b74f..b835d1fd 100644 --- a/jc/parsers/lsblk.py +++ b/jc/parsers/lsblk.py @@ -295,16 +295,13 @@ def _process(proc_data): List of Dictionaries. Structured data to conform to the schema. """ for entry in proc_data: - # boolean changes + # boolean and integer changes bool_list = ['rm', 'ro', 'rota', 'disc_zero', 'rand'] - for key in bool_list: - if key in entry: - entry[key] = jc.utils.convert_to_bool(entry[key]) - - # integer changes int_list = ['ra', 'alignment', 'min_io', 'opt_io', 'phy_sec', 'log_sec', 'rq_size', 'disc_aln'] - for key in int_list: - if key in entry: + for key in entry: + if key in bool_list: + entry[key] = jc.utils.convert_to_bool(entry[key]) + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/lsmod.py b/jc/parsers/lsmod.py index ba1b286a..07b07cdd 100644 --- a/jc/parsers/lsmod.py +++ b/jc/parsers/lsmod.py @@ -153,8 +153,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['size', 'used'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/lsof.py b/jc/parsers/lsof.py index 96dff8ea..8115763d 100644 --- a/jc/parsers/lsof.py +++ b/jc/parsers/lsof.py @@ -147,8 +147,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['pid', 'tid', 'size_off', 'node'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/netstat.py b/jc/parsers/netstat.py index a712168d..f72709c4 100644 --- a/jc/parsers/netstat.py +++ b/jc/parsers/netstat.py @@ -380,7 +380,7 @@ def _process(proc_data): List of Dictionaries. Structured data to conform to the schema. """ for entry in proc_data: - # integer changes + # integer and float conversions int_list = ['recv_q', 'send_q', 'pid', 'refcnt', 'inode', 'unit', 'vendor', 'class', 'osx_flags', 'subcla', 'pcbcount', 'rcvbuf', 'sndbuf', 'rxbytes', 'txbytes', 'route_refs', 'use', 'mtu', 'mss', 'window', 'irtt', 'metric', 'ipkts', @@ -388,10 +388,14 @@ def _process(proc_data): 'tx_ok', 'tx_err', 'tx_drp', 'tx_ovr', 'idrop', 'ibytes', 'obytes', 'r_mbuf', 's_mbuf', 'r_clus', 's_clus', 'r_hiwa', 's_hiwa', 'r_lowa', 's_lowa', 'r_bcnt', 's_bcnt', 'r_bmax', 's_bmax', 'rexmit', 'ooorcv', '0_win'] - for key in int_list: - if key in entry: + float_list = ['rexmt', 'persist', 'keep', '2msl', 'delack', 'rcvtime'] + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) + if key in float_list: + entry[key] = jc.utils.convert_to_float(entry[key]) + # add number keys if 'local_port' in entry: local_num = jc.utils.convert_to_int(entry['local_port']) if local_num: @@ -402,12 +406,6 @@ def _process(proc_data): if foreign_num: entry['foreign_port_num'] = foreign_num - # float changes - float_list = ['rexmt', 'persist', 'keep', '2msl', 'delack', 'rcvtime'] - for key in float_list: - if key in entry: - entry[key] = jc.utils.convert_to_float(entry[key]) - return proc_data diff --git a/jc/parsers/ntpq.py b/jc/parsers/ntpq.py index bf879abc..4d2a8aef 100644 --- a/jc/parsers/ntpq.py +++ b/jc/parsers/ntpq.py @@ -240,13 +240,11 @@ def _process(proc_data): entry['state'] = entry.pop('s') int_list = ['st', 'when', 'poll', 'reach'] - for key in int_list: - if key in entry: - entry[key] = jc.utils.convert_to_int(entry[key]) - float_list = ['delay', 'offset', 'jitter'] - for key in float_list: - if key in entry: + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) + if key in float_list: entry[key] = jc.utils.convert_to_float(entry[key]) return proc_data diff --git a/jc/parsers/passwd.py b/jc/parsers/passwd.py index bf6912df..acb5d616 100644 --- a/jc/parsers/passwd.py +++ b/jc/parsers/passwd.py @@ -121,8 +121,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['uid', 'gid'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/ps.py b/jc/parsers/ps.py index 97c3e428..bf8e4749 100644 --- a/jc/parsers/ps.py +++ b/jc/parsers/ps.py @@ -241,16 +241,13 @@ def _process(proc_data): if '%mem' in entry: entry['mem_percent'] = entry.pop('%mem') - # change to int + # convert ints and floats int_list = ['pid', 'ppid', 'c', 'vsz', 'rss'] - for key in int_list: - if key in entry: - entry[key] = jc.utils.convert_to_int(entry[key]) - - # change to float float_list = ['cpu_percent', 'mem_percent'] - for key in float_list: - if key in entry: + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) + if key in float_list: entry[key] = jc.utils.convert_to_float(entry[key]) # clean up other fields diff --git a/jc/parsers/route.py b/jc/parsers/route.py index 9fc3f721..2f3944c8 100644 --- a/jc/parsers/route.py +++ b/jc/parsers/route.py @@ -138,8 +138,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['metric', 'ref', 'use', 'mss', 'window', 'irtt'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) # add flags_pretty diff --git a/jc/parsers/rpm_qi.py b/jc/parsers/rpm_qi.py index 19df676f..e63f63a0 100644 --- a/jc/parsers/rpm_qi.py +++ b/jc/parsers/rpm_qi.py @@ -185,8 +185,8 @@ def _process(proc_data): for entry in proc_data: int_list = ['epoch', 'size'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if 'build_date' in entry: diff --git a/jc/parsers/shadow.py b/jc/parsers/shadow.py index 4df9c09e..ebaae347 100644 --- a/jc/parsers/shadow.py +++ b/jc/parsers/shadow.py @@ -128,8 +128,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['last_changed', 'minimum', 'maximum', 'warn', 'inactive', 'expire'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) return proc_data diff --git a/jc/parsers/ss.py b/jc/parsers/ss.py index 0437d126..62d3fc2c 100644 --- a/jc/parsers/ss.py +++ b/jc/parsers/ss.py @@ -306,8 +306,8 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['recv_q', 'send_q', 'pid'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) if 'local_port' in entry: diff --git a/jc/parsers/stat.py b/jc/parsers/stat.py index 534a815d..d071bf31 100644 --- a/jc/parsers/stat.py +++ b/jc/parsers/stat.py @@ -197,8 +197,8 @@ def _process(proc_data): for entry in proc_data: int_list = ['size', 'blocks', 'io_blocks', 'inode', 'links', 'uid', 'gid', 'unix_device', 'rdev', 'block_size'] - for key in int_list: - if key in entry: + for key in entry: + if key in int_list: entry[key] = jc.utils.convert_to_int(entry[key]) # turn - into null for time fields and add calculated timestamp fields diff --git a/jc/parsers/systemctl_lj.py b/jc/parsers/systemctl_lj.py index fa360e69..ee0a701d 100644 --- a/jc/parsers/systemctl_lj.py +++ b/jc/parsers/systemctl_lj.py @@ -75,7 +75,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.4' + version = '1.5' description = '`systemctl list-jobs` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -102,13 +102,10 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['job'] - for key in int_list: - if key in entry: - try: - key_int = int(entry[key]) - entry[key] = key_int - except (ValueError): - entry[key] = None + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) + return proc_data diff --git a/jc/parsers/systeminfo.py b/jc/parsers/systeminfo.py index c6f8b571..c8f6cc9e 100644 --- a/jc/parsers/systeminfo.py +++ b/jc/parsers/systeminfo.py @@ -241,7 +241,7 @@ def _process(proc_data): proc_data[item] = None for i, nic in enumerate(proc_data["network_cards"]): - proc_data["network_cards"][i]["dhcp_enabled"] = _convert_to_boolean( + proc_data["network_cards"][i]["dhcp_enabled"] = jc.utils.convert_to_bool( nic["dhcp_enabled"] ) @@ -258,7 +258,7 @@ def _process(proc_data): "virtual_memory_in_use_mb", ] for key in int_list: - proc_data[key] = _convert_to_int(proc_data.get(key)) + proc_data[key] = jc.utils.convert_to_int(proc_data[key]) dt_list = ["original_install_date", "system_boot_time"] for key in dt_list: @@ -282,7 +282,7 @@ def _process(proc_data): if hyperv_key in proc_data: for key in hyperv_subkey_list: if key in proc_data[hyperv_key]: - proc_data[hyperv_key][key] = _convert_to_boolean( + proc_data[hyperv_key][key] = jc.utils.convert_to_bool( proc_data[hyperv_key][key] ) diff --git a/jc/parsers/time.py b/jc/parsers/time.py index 46f19e09..99511e33 100644 --- a/jc/parsers/time.py +++ b/jc/parsers/time.py @@ -123,7 +123,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.1' + version = '1.2' description = '`/usr/bin/time` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -156,38 +156,30 @@ def _process(proc_data): *hours, minutes, seconds, centiseconds = proc_data['elapsed_time'].split(':') proc_data['elapsed_time'] = proc_data['elapsed_time'][::-1].replace(':', '.', 1)[::-1] if hours: - proc_data['elapsed_time_hours'] = int(hours[0]) + proc_data['elapsed_time_hours'] = jc.utils.convert_to_int(hours[0]) else: proc_data['elapsed_time_hours'] = 0 - proc_data['elapsed_time_minutes'] = int(minutes) - proc_data['elapsed_time_seconds'] = int(seconds) - proc_data['elapsed_time_centiseconds'] = int(centiseconds) + proc_data['elapsed_time_minutes'] = jc.utils.convert_to_int(minutes) + proc_data['elapsed_time_seconds'] = jc.utils.convert_to_int(seconds) + proc_data['elapsed_time_centiseconds'] = jc.utils.convert_to_int(centiseconds) proc_data['elapsed_time_total_seconds'] = (proc_data['elapsed_time_hours'] * 3600) + \ (proc_data['elapsed_time_minutes'] * 60) + \ (proc_data['elapsed_time_seconds']) + \ (proc_data['elapsed_time_centiseconds'] / 100) - int_list = ['elapsed_time_hours', 'elapsed_time_minutes', 'elapsed_time_seconds', 'elapsed_time_microseconds', - 'cpu_percent', 'average_shared_text_size', 'average_unshared_data_size', 'average_unshared_stack_size', + # convert ints and floats + int_list = ['cpu_percent', 'average_shared_text_size', 'average_unshared_data_size', 'average_unshared_stack_size', 'average_shared_memory_size', 'maximum_resident_set_size', 'block_input_operations', 'block_output_operations', 'major_pagefaults', 'minor_pagefaults', 'swaps', 'page_reclaims', 'page_faults', 'messages_sent', 'messages_received', 'signals_received', 'voluntary_context_switches', 'involuntary_context_switches', 'average_stack_size', 'average_total_size', 'average_resident_set_size', 'signals_delivered', 'page_size', 'exit_status'] - for key in int_list: - if key in proc_data: - try: - proc_data[key] = int(proc_data[key]) - except (ValueError, TypeError): - proc_data[key] = None - float_list = ['real_time', 'user_time', 'system_time'] - for key in float_list: - if key in proc_data: - try: - proc_data[key] = float(proc_data[key]) - except (ValueError): - proc_data[key] = None + for key in proc_data: + if key in int_list: + proc_data[key] = jc.utils.convert_to_int(proc_data[key]) + if key in float_list: + proc_data[key] = jc.utils.convert_to_float(proc_data[key]) return proc_data diff --git a/jc/parsers/timedatectl.py b/jc/parsers/timedatectl.py index 565119a1..b1f99845 100644 --- a/jc/parsers/timedatectl.py +++ b/jc/parsers/timedatectl.py @@ -63,7 +63,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.3' + version = '1.4' description = '`timedatectl status` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -89,15 +89,11 @@ def _process(proc_data): Dictionary. Structured data to conform to the schema. """ - # boolean changes bool_list = ['ntp_enabled', 'ntp_synchronized', 'rtc_in_local_tz', 'dst_active', 'system_clock_synchronized', 'systemd-timesyncd.service_active'] for key in proc_data: if key in bool_list: - try: - proc_data[key] = True if proc_data[key] == 'yes' else False - except (ValueError): - proc_data[key] = None + proc_data[key] = jc.utils.convert_to_bool(proc_data[key]) if 'universal_time' in proc_data: ts = jc.utils.timestamp(proc_data['universal_time']) diff --git a/jc/parsers/tracepath.py b/jc/parsers/tracepath.py index 23af12d7..24b226a3 100644 --- a/jc/parsers/tracepath.py +++ b/jc/parsers/tracepath.py @@ -132,7 +132,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.1' + version = '1.2' description = '`tracepath` and `tracepath6` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -157,39 +157,23 @@ def _process(proc_data): Dictionary. Structured data to conform to the schema. """ + # convert ints and floats int_list = ['pmtu', 'forward_hops', 'return_hops', 'ttl', 'asymmetric_difference'] float_list = ['reply_ms'] - - for key, value in proc_data.items(): - for item in int_list: - if key in int_list: - try: - proc_data[key] = int(proc_data[key]) - except (ValueError, TypeError): - proc_data[key] = None - - for item in int_list: - if key in float_list: - try: - proc_data[key] = float(proc_data[key]) - except (ValueError, TypeError): - proc_data[key] = None + for key in proc_data: + if key in int_list: + proc_data[key] = jc.utils.convert_to_int(proc_data[key]) + if key in float_list: + proc_data[key] = jc.utils.convert_to_float(proc_data[key]) if 'hops' in proc_data: for entry in proc_data['hops']: - for key in int_list: - if key in entry: - try: - entry[key] = int(entry[key]) - except (ValueError, TypeError): - entry[key] = None + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) - for key in float_list: - if key in entry: - try: - entry[key] = float(entry[key]) - except (ValueError, TypeError): - entry[key] = None + if key in float_list: + entry[key] = jc.utils.convert_to_float(entry[key]) return proc_data diff --git a/jc/parsers/traceroute.py b/jc/parsers/traceroute.py index b64d335c..e7d3e99f 100644 --- a/jc/parsers/traceroute.py +++ b/jc/parsers/traceroute.py @@ -119,7 +119,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.2' + version = '1.3' description = '`traceroute` and `traceroute6` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -335,35 +335,21 @@ def _process(proc_data): if 'hops' in proc_data: for entry in proc_data['hops']: - for key in int_list: - if key in entry: - try: - entry[key] = int(entry[key]) - except (ValueError, TypeError): - entry[key] = None + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) - for key in float_list: - if key in entry: - try: - entry[key] = float(entry[key]) - except (ValueError, TypeError): - entry[key] = None + if key in float_list: + entry[key] = jc.utils.convert_to_float(entry[key]) if 'probes' in entry: for item in entry['probes']: - for key in int_list: - if key in item: - try: - item[key] = int(item[key]) - except (ValueError, TypeError): - item[key] = None + for key in item: + if key in int_list: + item[key] = jc.utils.convert_to_int(item[key]) - for key in float_list: - if key in item: - try: - item[key] = float(item[key]) - except (ValueError, TypeError): - item[key] = None + if key in float_list: + item[key] = jc.utils.convert_to_float(item[key]) return proc_data diff --git a/jc/parsers/upower.py b/jc/parsers/upower.py index d7871b24..ebc92efc 100644 --- a/jc/parsers/upower.py +++ b/jc/parsers/upower.py @@ -194,7 +194,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.1' + version = '1.2' description = '`upower` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -225,7 +225,7 @@ def _process(proc_data): if 'updated' in entry: updated_list = entry['updated'].replace('(', '').replace(')', '').split() entry['updated'] = ' '.join(updated_list[:-3]) - entry['updated_seconds_ago'] = int(updated_list[-3]) + entry['updated_seconds_ago'] = jc.utils.convert_to_int(updated_list[-3]) if entry['updated']: ts = jc.utils.timestamp(entry['updated']) @@ -236,20 +236,14 @@ def _process(proc_data): bool_list = ['power_supply', 'has_history', 'has_statistics', 'on_battery', 'lid_is_closed', 'lid_is_present'] for key in entry: if key in bool_list: - if entry[key].lower() == 'yes': - entry[key] = True - else: - entry[key] = False + entry[key] = jc.utils.convert_to_bool(entry[key]) # detail level boolean conversions bool_list = ['online', 'present', 'rechargeable'] if 'detail' in entry: for key in entry['detail']: if key in bool_list: - if entry['detail'][key].lower() == 'yes': - entry['detail'][key] = True - else: - entry['detail'][key] = False + entry['detail'][key] = jc.utils.convert_to_bool(entry['detail'][key]) # detail level convert warning to null if value is none if 'detail' in entry: @@ -262,8 +256,8 @@ def _process(proc_data): add_items = [] for key, value in entry['detail'].items(): if value and isinstance(value, str): - if len(value.split()) == 2 and value.split()[0].replace('.', '').isnumeric(): - entry['detail'][key] = float(value.split()[0]) + if len(value.split()) == 2: + entry['detail'][key] = jc.utils.convert_to_float(value.split()[0]) add_items.append({ key + '_unit': value.split()[1] }) @@ -278,7 +272,7 @@ def _process(proc_data): for key, value in entry['detail'].items(): if value and isinstance(value, str): if value[-1] == '%': - entry['detail'][key] = float(value[:-1]) + entry['detail'][key] = jc.utils.convert_to_float(value) # detail level fix quoted values if 'detail' in entry: @@ -302,9 +296,9 @@ def _process(proc_data): new_history_obj = {} for key, value in history_obj.items(): if key == 'time': - new_history_obj[key] = int(value) + new_history_obj[key] = jc.utils.convert_to_int(value) elif key == 'percent_charged': - new_history_obj[key] = float(value) + new_history_obj[key] = jc.utils.convert_to_float(value) else: new_history_obj[key] = value diff --git a/jc/parsers/uptime.py b/jc/parsers/uptime.py index 5597f341..cccf78d0 100644 --- a/jc/parsers/uptime.py +++ b/jc/parsers/uptime.py @@ -65,7 +65,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.4' + version = '1.5' description = '`uptime` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -92,10 +92,10 @@ def _process(proc_data): """ if 'time' in proc_data: time_list = proc_data['time'].split(':') - proc_data['time_hour'] = int(time_list[0]) - proc_data['time_minute'] = int(time_list[1]) + proc_data['time_hour'] = jc.utils.convert_to_int(time_list[0]) + proc_data['time_minute'] = jc.utils.convert_to_int(time_list[1]) if len(time_list) == 3: - proc_data['time_second'] = int(time_list[2]) + proc_data['time_second'] = jc.utils.convert_to_int(time_list[2]) else: proc_data['time_second'] = None @@ -113,14 +113,14 @@ def _process(proc_data): uptime_total_seconds = 0 if 'min' in proc_data['uptime']: - uptime_minutes = int(proc_data['uptime'].split()[-2]) + uptime_minutes = jc.utils.convert_to_int(proc_data['uptime'].split()[-2]) if ':' in proc_data['uptime']: - uptime_hours = int(proc_data['uptime'].split()[-1].split(':')[-2]) - uptime_minutes = int(proc_data['uptime'].split(':')[-1]) + uptime_hours = jc.utils.convert_to_int(proc_data['uptime'].split()[-1].split(':')[-2]) + uptime_minutes = jc.utils.convert_to_int(proc_data['uptime'].split(':')[-1]) if 'day' in proc_data['uptime']: - uptime_days = int(proc_data['uptime'].split()[0]) + uptime_days = jc.utils.convert_to_int(proc_data['uptime'].split()[0]) proc_data['uptime_days'] = uptime_days proc_data['uptime_hours'] = uptime_hours @@ -129,25 +129,14 @@ def _process(proc_data): uptime_total_seconds = (uptime_days * 86400) + (uptime_hours * 3600) + (uptime_minutes * 60) proc_data['uptime_total_seconds'] = uptime_total_seconds - # integer conversions + # integer and float conversions 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 conversions 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 + for key in proc_data: + if key in int_list: + proc_data[key] = jc.utils.convert_to_int(proc_data[key]) + if key in float_list: + proc_data[key] = jc.utils.convert_to_float(proc_data[key]) return proc_data diff --git a/jc/parsers/w.py b/jc/parsers/w.py index d9719c66..65682166 100644 --- a/jc/parsers/w.py +++ b/jc/parsers/w.py @@ -131,8 +131,8 @@ def _process(proc_data): """ for entry in proc_data: null_list = ['user', 'tty', 'from', 'login_at', 'idle', 'what'] - for key in null_list: - if key in entry: + for key in entry: + if key in null_list: if entry[key] == '-': entry[key] = None diff --git a/jc/parsers/wc.py b/jc/parsers/wc.py index 2dfa0859..6a3c4f4d 100644 --- a/jc/parsers/wc.py +++ b/jc/parsers/wc.py @@ -54,7 +54,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.1' + version = '1.2' description = '`wc` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -82,12 +82,10 @@ def _process(proc_data): for entry in proc_data: int_list = ['lines', 'words', 'characters'] - for key in int_list: - if key in entry: - try: - entry[key] = int(entry[key]) - except (ValueError): - entry[key] = None + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) + return proc_data diff --git a/jc/parsers/who.py b/jc/parsers/who.py index 336d12cc..bf55caf5 100644 --- a/jc/parsers/who.py +++ b/jc/parsers/who.py @@ -133,7 +133,7 @@ import jc.utils class info(): """Provides parser metadata (version, author, etc.)""" - version = '1.3' + version = '1.4' description = '`who` command parser' author = 'Kelly Brazil' author_email = 'kellyjonbrazil@gmail.com' @@ -161,13 +161,9 @@ def _process(proc_data): """ for entry in proc_data: int_list = ['pid'] - for key in int_list: - if key in entry: - try: - key_int = int(entry[key]) - entry[key] = key_int - except (ValueError): - entry[key] = None + for key in entry: + if key in int_list: + entry[key] = jc.utils.convert_to_int(entry[key]) if 'time' in entry: ts = jc.utils.timestamp(entry['time']) diff --git a/jc/utils.py b/jc/utils.py index 278b2664..211675ff 100644 --- a/jc/utils.py +++ b/jc/utils.py @@ -89,21 +89,26 @@ def convert_to_int(value): Parameters: - value: (string) Input value + value: (string/integer/float) Input value Returns: integer/None Integer if successful conversion, otherwise None """ - try: - value = int(re.sub(r'[^0-9\-\.]', '', value)) - except (ValueError, TypeError): + if isinstance(value, str): try: - value = round(convert_to_float(value)) - except (ValueError, TypeError): - return None + return int(re.sub(r'[^0-9\-\.]', '', value)) + except ValueError: + try: + return round(convert_to_float(value)) + except (ValueError, TypeError): + return None - return value + elif isinstance(value, (int, float)): + return int(value) + + else: + return None def convert_to_float(value): @@ -118,12 +123,17 @@ def convert_to_float(value): float/None Float if successful conversion, otherwise None """ - try: - value = float(re.sub(r'[^0-9\-\.]', '', value)) - except (ValueError, TypeError): - return None + if isinstance(value, str): + try: + return float(re.sub(r'[^0-9\-\.]', '', value)) + except (ValueError, TypeError): + return None - return value + elif isinstance(value, (int, float)): + return float(value) + + else: + return None def convert_to_bool(value):