summaryrefslogtreecommitdiffstats
path: root/hostinfo/printer.py
diff options
context:
space:
mode:
Diffstat (limited to 'hostinfo/printer.py')
-rw-r--r--hostinfo/printer.py97
1 files changed, 70 insertions, 27 deletions
diff --git a/hostinfo/printer.py b/hostinfo/printer.py
index 97ed4ca..438464b 100644
--- a/hostinfo/printer.py
+++ b/hostinfo/printer.py
@@ -1,5 +1,19 @@
# -*- coding: utf-8 -*-
+from __future__ import print_function
+
+class Prefix:
+ def __init__(self, prefix, output, oneline):
+ self.prefix = prefix
+ self.output = output
+ self.empty = oneline
+
+ def pprint(self, data):
+ self.output("%s%s" % (self.prefix, data))
+ if not self.empty:
+ self.prefix = ' ' * len(self.prefix)
+ self.empty = True
+
class Printer:
labels = {
'hostname': 'Hostname',
@@ -10,41 +24,77 @@ class Printer:
'vserver': 'VServer'
}
- sort = ['hostname', 'arch', 'os', 'addresses']
ignore = ['vserver-host']
- def __init__(self, data):
+ def __init__(self, data, oneline):
self.data = data
+ self.oneline = oneline
+
+ def _sort_with_list(self, list, sort):
+ def helper(value):
+ if value in sort:
+ return sort.index(value)
+ return len(sort)
+
+ return sorted(list, key=helper)
+
+ def print_addresses(self, p, value):
+ 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)
- def print_addresses(self, label, value):
- for ip in value:
- print('%s%s/%s (%s)' %
- (label, ip['address'], ip['netmask'], ip['interface']))
- label = self.empty
+ for ip in value:
+ if interface == ip['interface']:
+ p_new.pprint('%s/%s' %
+ (ip['address'], ip['netmask']))
- def print_vserver(self, label, value):
+ def print_vserver(self, p, value):
if value == 'guest':
- print('%sguest running on %s' %
- (label, self.data['vserver-host']))
+ p.pprint('guest running on %s' % self.data['vserver-host'])
else:
- print('%s %s' % (self.label, value))
+ p.pprint(value)
+
+ def print_ports(self, p, value):
+ processes = set([port['process'] for port in value if 'process' in port])
+ processes = self._sort_with_list(processes,
+ ['sshd', 'nrpe', 'munin-node'])
+ if len([port for port in value if 'process' not in port]) > 0:
+ processes.append('UNKNOWN')
+
+ 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):
label = ''
if self.length > 0:
label = '%s: ' % self.get_label(key)
label = label.rjust(self.length)
+ p = Prefix(label, print, self.oneline)
try:
method = getattr(self, 'print_%s' % key)
- method(label, value)
+ method(p, value)
except AttributeError:
if isinstance(value, list):
for v in value:
- print('%s%s' % (label, v))
- label = self.empty
+ p.pprint(v)
else:
- print('%s%s' % (label, value))
+ p.pprint(value)
def get_label(self, key):
if key in self.labels:
@@ -55,22 +105,15 @@ class Printer:
# find max lenght for labels
labels = map(self.get_label, self.data.keys())
self.length = max(map(len, labels)) + 3
- self.empty = ' ' * self.length
if key is not None:
self.length = 0
- self.empty = ''
if key in self.data:
self.print_default(key, self.data[key])
else:
- # first the sorted keys
- for key in self.sort:
- if key in self.data:
+ keys = self._sort_with_list(self.data.keys(),
+ ['hostname', 'arch', 'os',
+ 'addresses', 'ports'])
+ for key in keys:
+ if key not in self.ignore:
self.print_default(key, self.data[key])
-
- # other keys, that are not ignored
- for key in [k for k in self.data.keys()
- if k not in self.sort
- and k not in self.ignore]:
- self.print_default(key, self.data[key])
-