mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-07-17 01:32:37 +02:00
process ifconfig data
This commit is contained in:
@ -5,36 +5,67 @@ Usage:
|
|||||||
|
|
||||||
no ifconfig options are supported.
|
no ifconfig options are supported.
|
||||||
|
|
||||||
Example:
|
Examples:
|
||||||
|
|
||||||
$ ifconfig | jc --ifconfig -p
|
$ ifconfig | jc --ifconfig -p
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "docker0",
|
"name": "ens33",
|
||||||
"flags": "4099",
|
"flags": 4163,
|
||||||
"state": "UP,BROADCAST,MULTICAST",
|
"state": "UP,BROADCAST,RUNNING,MULTICAST",
|
||||||
"mtu": "1500",
|
"mtu": 1500,
|
||||||
"ipv4_addr": "172.17.0.1",
|
"ipv4_addr": "192.168.71.138",
|
||||||
"ipv4_mask": "255.255.0.0",
|
"ipv4_mask": "255.255.255.0",
|
||||||
"ipv4_bcast": "0.0.0.0",
|
"ipv4_bcast": "192.168.71.255",
|
||||||
"mac_addr": "02:42:53:18:31:cc",
|
"ipv6_addr": "fe80::c1cb:715d:bc3e:b8a0",
|
||||||
|
"ipv6_mask": 64,
|
||||||
|
"ipv6_scope": "link",
|
||||||
|
"mac_addr": "00:0c:29:3b:58:0e",
|
||||||
"type": "Ethernet",
|
"type": "Ethernet",
|
||||||
"rx_packets": "0",
|
"rx_packets": 6374,
|
||||||
"rx_errors": "0",
|
"rx_errors": 0,
|
||||||
"rx_dropped": "0",
|
"rx_dropped": 0,
|
||||||
"rx_overruns": "0",
|
"rx_overruns": 0,
|
||||||
"rx_frame": "0",
|
"rx_frame": 0,
|
||||||
"tx_packets": "0",
|
"tx_packets": 3707,
|
||||||
"tx_errors": "0",
|
"tx_errors": 0,
|
||||||
"tx_dropped": "0",
|
"tx_dropped": 0,
|
||||||
"tx_overruns": "0",
|
"tx_overruns": 0,
|
||||||
"tx_carrier": "0",
|
"tx_carrier": 0,
|
||||||
"tx_collisions": "0",
|
"tx_collisions": 0,
|
||||||
"ipv6_addr": null,
|
|
||||||
"ipv6_mask": null,
|
|
||||||
"ipv6_scope": null,
|
|
||||||
"metric": null
|
"metric": null
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "lo",
|
||||||
|
"flags": 73,
|
||||||
|
"state": "UP,LOOPBACK,RUNNING",
|
||||||
|
"mtu": 65536,
|
||||||
|
"ipv4_addr": "127.0.0.1",
|
||||||
|
"ipv4_mask": "255.0.0.0",
|
||||||
|
"ipv4_bcast": null,
|
||||||
|
"ipv6_addr": "::1",
|
||||||
|
"ipv6_mask": 128,
|
||||||
|
"ipv6_scope": "host",
|
||||||
|
"mac_addr": null,
|
||||||
|
"type": "Local Loopback",
|
||||||
|
"rx_packets": 81,
|
||||||
|
"rx_errors": 0,
|
||||||
|
"rx_dropped": 0,
|
||||||
|
"rx_overruns": 0,
|
||||||
|
"rx_frame": 0,
|
||||||
|
"tx_packets": 81,
|
||||||
|
"tx_errors": 0,
|
||||||
|
"tx_dropped": 0,
|
||||||
|
"tx_overruns": 0,
|
||||||
|
"tx_carrier": 0,
|
||||||
|
"tx_collisions": 0,
|
||||||
|
"metric": null
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
$ ifconfig | jc --ifconfig -p -r
|
||||||
|
[
|
||||||
{
|
{
|
||||||
"name": "ens33",
|
"name": "ens33",
|
||||||
"flags": "4163",
|
"flags": "4163",
|
||||||
@ -89,12 +120,57 @@ $ ifconfig | jc --ifconfig -p
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
from collections import namedtuple
|
|
||||||
from ifconfigparser import IfconfigParser
|
from ifconfigparser import IfconfigParser
|
||||||
|
|
||||||
|
|
||||||
def parse(data):
|
def process(proc_data):
|
||||||
output = []
|
'''schema:
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": string,
|
||||||
|
"flags": integer,
|
||||||
|
"state": string,
|
||||||
|
"mtu": integer,
|
||||||
|
"ipv4_addr": string,
|
||||||
|
"ipv4_mask": string,
|
||||||
|
"ipv4_bcast": string,
|
||||||
|
"ipv6_addr": string,
|
||||||
|
"ipv6_mask": integer,
|
||||||
|
"ipv6_scope": string,
|
||||||
|
"mac_addr": string,
|
||||||
|
"type": string,
|
||||||
|
"rx_packets": integer,
|
||||||
|
"rx_errors": integer,
|
||||||
|
"rx_dropped": integer,
|
||||||
|
"rx_overruns": integer,
|
||||||
|
"rx_frame": integer,
|
||||||
|
"tx_packets": integer,
|
||||||
|
"tx_errors": integer,
|
||||||
|
"tx_dropped": integer,
|
||||||
|
"tx_overruns": integer,
|
||||||
|
"tx_carrier": integer,
|
||||||
|
"tx_collisions": integer,
|
||||||
|
"metric": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
'''
|
||||||
|
for entry in proc_data:
|
||||||
|
int_list = ['flags', 'mtu', 'ipv6_mask', 'rx_packets', 'rx_errors', 'rx_dropped', 'rx_overruns',
|
||||||
|
'rx_frame', 'tx_packets', 'tx_errors', 'tx_dropped', 'tx_overruns', 'tx_carrier',
|
||||||
|
'tx_collisions', 'metric']
|
||||||
|
for key in int_list:
|
||||||
|
if key in entry:
|
||||||
|
try:
|
||||||
|
key_int = int(entry[key])
|
||||||
|
entry[key] = key_int
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
entry[key] = None
|
||||||
|
|
||||||
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
|
def parse(data, raw=False):
|
||||||
|
raw_output = []
|
||||||
|
|
||||||
parsed = IfconfigParser(console_output=data)
|
parsed = IfconfigParser(console_output=data)
|
||||||
interfaces = parsed.get_interfaces()
|
interfaces = parsed.get_interfaces()
|
||||||
@ -103,6 +179,9 @@ def parse(data):
|
|||||||
for iface in interfaces:
|
for iface in interfaces:
|
||||||
d = interfaces[iface]._asdict()
|
d = interfaces[iface]._asdict()
|
||||||
dct = dict(d)
|
dct = dict(d)
|
||||||
output.append(dct)
|
raw_output.append(dct)
|
||||||
|
|
||||||
return output
|
if raw:
|
||||||
|
return raw_output
|
||||||
|
else:
|
||||||
|
return process(raw_output)
|
||||||
|
Reference in New Issue
Block a user