summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-05-08 03:44:23 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-05-08 03:44:23 +0200
commit5d6cd2f0e6c2788eccf8a999e63e34154ff3e5b1 (patch)
treede56279423c998edd9187bd3574bebfd1211abb8
parentbf247de21ba21a47a42e79fa6f8c8b5ba1756d46 (diff)
downloadtools-5d6cd2f0e6c2788eccf8a999e63e34154ff3e5b1.tar.gz
tools-5d6cd2f0e6c2788eccf8a999e63e34154ff3e5b1.tar.bz2
tools-5d6cd2f0e6c2788eccf8a999e63e34154ff3e5b1.zip
hostinfo: add filter support for sub keys like addresses.eth00.1.3
-rw-r--r--hostinfo/printer.py64
1 files changed, 38 insertions, 26 deletions
diff --git a/hostinfo/printer.py b/hostinfo/printer.py
index 438464b..b923b70 100644
--- a/hostinfo/printer.py
+++ b/hostinfo/printer.py
@@ -38,25 +38,29 @@ class Printer:
return sorted(list, key=helper)
- def print_addresses(self, p, value):
+ def print_addresses(self, p, value, filter_key):
interfaces = sorted(set([ip['interface'] for ip in value]))
maxlength = max(map(len, interfaces))
for interface in interfaces:
- iface_name = ("%s: " % interface).ljust(maxlength+2)
- p_new = Prefix(iface_name, p.pprint, self.oneline)
+ if filter_key is None:
+ iface_name = ("%s: " % interface).ljust(maxlength+2)
+ p_new = Prefix(iface_name, p.pprint, self.oneline)
+ else:
+ p_new = p
- for ip in value:
- if interface == ip['interface']:
- p_new.pprint('%s/%s' %
- (ip['address'], ip['netmask']))
+ if filter_key is None or filter_key == interface:
+ for ip in value:
+ if interface == ip['interface']:
+ p_new.pprint('%s/%s' %
+ (ip['address'], ip['netmask']))
- def print_vserver(self, p, value):
+ def print_vserver(self, p, value, filter_key):
if value == 'guest':
p.pprint('guest running on %s' % self.data['vserver-host'])
else:
p.pprint(value)
- def print_ports(self, p, value):
+ def print_ports(self, p, value, filter_key):
processes = set([port['process'] for port in value if 'process' in port])
processes = self._sort_with_list(processes,
['sshd', 'nrpe', 'munin-node'])
@@ -65,21 +69,25 @@ class Printer:
maxlength = max(map(len, processes))
for process in processes:
- process_name = ("%s: " % process).ljust(maxlength+2)
- p_new = Prefix(process_name, p.pprint, self.oneline)
-
- for port in value:
- if 'process' in port and process == port['process'] or \
- 'process' not in port and process == 'UNKNOWN':
- if port['proto'] in ['tcp6', 'udp6']:
- p_new.pprint('(%s) [%s]:%s' %
- (port['proto'].replace('6', ''),
- port['ip'], port['port']))
- else:
- p_new.pprint('(%s) %s:%s' %
- (port['proto'], port['ip'], port['port']))
-
- def print_default(self, key, value):
+ if filter_key is None:
+ process_name = ("%s: " % process).ljust(maxlength+2)
+ p_new = Prefix(process_name, p.pprint, self.oneline)
+ else:
+ p_new = p
+
+ if filter_key is None or filter_key == process:
+ for port in value:
+ if 'process' in port and process == port['process'] or \
+ 'process' not in port and process == 'UNKNOWN':
+ if port['proto'] in ['tcp6', 'udp6']:
+ p_new.pprint('(%s) [%s]:%s' %
+ (port['proto'].replace('6', ''),
+ port['ip'], port['port']))
+ else:
+ p_new.pprint('(%s) %s:%s' %
+ (port['proto'], port['ip'], port['port']))
+
+ def print_default(self, key, value, filter_key=None):
label = ''
if self.length > 0:
label = '%s: ' % self.get_label(key)
@@ -88,7 +96,7 @@ class Printer:
try:
method = getattr(self, 'print_%s' % key)
- method(p, value)
+ method(p, value, filter_key)
except AttributeError:
if isinstance(value, list):
for v in value:
@@ -107,9 +115,13 @@ class Printer:
self.length = max(map(len, labels)) + 3
if key is not None:
+ key_extra = None
+ if '.' in key:
+ [key, key_extra] = key.split('.', 1)
+
self.length = 0
if key in self.data:
- self.print_default(key, self.data[key])
+ self.print_default(key, self.data[key], key_extra)
else:
keys = self._sort_with_list(self.data.keys(),
['hostname', 'arch', 'os',