diff --git a/hbdclass.py b/hbdclass.py index f33390a..1374338 100644 --- a/hbdclass.py +++ b/hbdclass.py @@ -31,6 +31,7 @@ class Connection: self.rtts = [0] self.lastbeat = time.time() self.statetime = self.lastbeat + self.deltastatetime = 'computed' self.state = Connection.unknown if host: @@ -45,18 +46,32 @@ class Connection: def statedict(self, Null=False): d = {} + now = time.time() if not Null: d['addr'] = self.addr if self.rtts[-1]: d['rtt'] = "%0.1f" % self.rtts[-1] else: - d['rtt'] = "" + d['rtt'] = "?" d['lastbeat'] = self.lastbeat if self.state == Connection.overdue: d['state'] = "%s" % self.state else: d['state'] = self.state + if self.state == Connection.up: + d['rttstate'] = d['rtt'] + else: + d['rttstate'] = d['state'] d['statetime'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.statetime)) + delta = now - self.statetime + if delta > 86400: + d['deltastatetime'] = time.strftime("%d %H:%M:%S", time.gmtime(delta)) + elif delta > 3600: + d['deltastatetime'] = time.strftime("%H:%M:%S", time.gmtime(delta)) + elif delta > 60: + d['deltastatetime'] = time.strftime("%M:%S", time.gmtime(delta)) + else: + d['deltastatetime'] = time.strftime("%S", time.gmtime(delta)) else: d['addr'] = '' @@ -64,6 +79,8 @@ class Connection: d['lastbeat'] = '' d['state'] = '' d['statetime'] = '' + d['deltastatetime'] = '' + d['rttstate'] = '' return d @@ -74,6 +91,8 @@ class Connection: d['lastbeat'] = 'Last Contact' d['state'] = 'State' d['statetime'] = 'Last State' + d['rttstate'] = 'Reach' + d['deltastatetime'] = 'Last State' return d @@ -257,35 +276,49 @@ class Host: return 'N/A>' - hostfields = ['name', 'IPv4.addr', 'IPv4.state', 'IPv4.rtt', 'IPv4.statetime', 'IPv6.addr', 'IPv6.state', 'IPv6.rtt', 'IPv6.statetime', 'ver'] - def htmlheaders(self): + hostfields_long = ['name', 'IPv4.addr', + 'IPv4.state', ('IPv4.rtt','style="text-align: right;"'), + ('IPv4.statetime','style="text-align: right;"'), 'IPv6.addr', + 'IPv6.state', ('IPv6.rtt', 'style="text-align: right;"'), + ('IPv6.statetime','style="text-align: right;"'), 'ver'] + + hostfields_short = ['name', + ('IPv4.rttstate','style="text-align: right;"'), + ('IPv4.deltastatetime','style="text-align: right;"'), + ('IPv6.rttstate','style="text-align: right;"'), + ('IPv6.deltastatetime','style="text-align: right;"')] + + def gene(self, tag, v, attrib=None): + if attrib: + a=" %s" % attrib + else: + a="" + return "<%s%s>%s" % (tag, a, v, tag) + + + def htmltable(self, tag, hd, short): + if short: + hostfields = Host.hostfields_short + else: + hostfields = Host.hostfields_long h = [] - hd = ubHost.headerdict() - for f in Host.hostfields: - h.append(hd[f]) - return ""+"".join(h)+"\n" + for f in hostfields: + if type(f) == type(()): + h.append(self.gene(tag, hd[f[0]], f[1])) + else: + h.append(self.gene(tag, hd[f])) + return self.gene("tr", "\n".join(h)) - def htmldisp(self): - h = [] - hd = self.statedict() - for f in Host.hostfields: - h.append(hd[f]) - return ""+"".join(h)+"\n" - -# return "%-24s%-7s%s%-16s%-16s%-17s%s\n" % \ -# (self.name, self.dispstate(), self.dispstats(), ipv4addr, ipv6addr, lastts, self.cver) - - - def buildhosttable(self): + def buildhosttable(self, short=False): res = [] res.append('') - res.append(ubHost.htmlheaders()) + res.append(ubHost.htmltable('th', ubHost.headerdict(), short)) hosts_sorted = Host.hosts.keys() if len(hosts_sorted): hosts_sorted.sort() for h in hosts_sorted: - res.append(Host.hosts[h].htmldisp()) + res.append(ubHost.htmltable('td', Host.hosts[h].statedict(), short)) res.append("
") return res