key on hostname not IP address

sort display
beginning of signal processing
This commit is contained in:
andreas
2006-11-07 19:41:11 +00:00
parent be3192a147
commit f5e130f638
+27 -11
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env python #!/usr/bin/env python
# $Id: hbd,v 1.11 2006/04/28 12:53:08 andreas Exp $ # $Id: hbd,v 1.12 2006/11/07 19:41:11 andreas Exp $
# Wait for heartbeat messages and act on them (or their absence) # Wait for heartbeat messages and act on them (or their absence)
# #
import time, os, string, sys, socket, atexit, select, SocketServer, getopt import time, os, string, sys, socket, atexit, select, SocketServer, getopt, signal
False=0 False=0
True=1 True=1
@@ -30,6 +30,13 @@ msgw=None
msgwB=None msgwB=None
msgwHeight=10 msgwHeight=10
def handler(signum, frame):
global up, sig
sig=signum
if up == 0:
return
sys.exit(0)
class NullDevice: class NullDevice:
def write(self, s): def write(self, s):
pass pass
@@ -249,14 +256,13 @@ def log(m, service="heartbeat"):
def fromaddr(name, addr, boot, interval): def fromaddr(name, addr, boot, interval):
global htab global htab
if not htab.has_key(addr): if not hosts.has_key(name):
addhost(name, addr) addhost(name, addr)
host=hosts[htab[addr]] host=hosts[name]
if host.name != name: if host.addr != addr:
log("%s changed name to %s" % (host.name, name)) log("%s changed address to %s" % (host.name, addr))
del hosts[host.name] del htab[host.addr]
host.name=name host.addr=addr
hosts[name]=host
htab[addr]=name htab[addr]=name
host.lastbeat=now host.lastbeat=now
@@ -396,7 +402,9 @@ class HtmlHandler(SocketServer.BaseRequestHandler):
res.append("<H2>Heartbeat status at %s</H2>" % time.strftime("%H:%M:%S", time.localtime(now))) res.append("<H2>Heartbeat status at %s</H2>" % time.strftime("%H:%M:%S", time.localtime(now)))
res.append("<table>") res.append("<table>")
res.append("<tr><th>Host</th><th>State</th><th>IP Addr</th><th>Res</th><th>Last change</th></tr>\n" ) res.append("<tr><th>Host</th><th>State</th><th>IP Addr</th><th>Res</th><th>Last change</th></tr>\n" )
for h in hosts.keys(): hosts_sorted=hosts.keys()
hosts_sorted.sort()
for h in hosts_sorted:
res.append("<tr><td>%-24s</td><td>%-7s</td><td>%-16s</td><td>%-3s</td><td>%-17s</td></tr>\n" % (h, hosts[h].state, hosts[h].addr, hosts[h].uppercent, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(hosts[h].statetime)))) res.append("<tr><td>%-24s</td><td>%-7s</td><td>%-16s</td><td>%-3s</td><td>%-17s</td></tr>\n" % (h, hosts[h].state, hosts[h].addr, hosts[h].uppercent, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(hosts[h].statetime))))
res.append("</table>") res.append("</table>")
res.append("<P>") res.append("<P>")
@@ -553,9 +561,14 @@ if not forground:
os.setsid() os.setsid()
os.umask(0) os.umask(0)
up=1
sig=0
signal.signal(signal.SIGTERM, handler)
signal.signal(signal.SIGHUP, handler)
next=int(now)+1 next=int(now)+1
sleep=next - now sleep=next - now
while 1: while up:
if visual: if visual:
c = stdscr.getch() c = stdscr.getch()
if c == ord('c'): msgs=[]; display() if c == ord('c'): msgs=[]; display()
@@ -601,3 +614,6 @@ while 1:
sleep=0 sleep=0
if DEBUG: sys.stderr.write("sleep=%s next=%s\n" % (sleep, next)) if DEBUG: sys.stderr.write("sleep=%s next=%s\n" % (sleep, next))
if sig == signal.SIGHUP:
os.execv(sys.argv[0],sys.argv+['-R'])