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%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