From 5d6cd2f0e6c2788eccf8a999e63e34154ff3e5b1 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 8 May 2013 03:44:23 +0200 Subject: hostinfo: add filter support for sub keys like addresses.eth0 --- hostinfo/printer.py | 64 +++++++++++++++++++++++++++++++---------------------- 1 file 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', -- cgit v1.2.3-1-g7c22