diff --git a/hbc b/hbc index bb96d4f..1937e0b 100755 --- a/hbc +++ b/hbc @@ -1,11 +1,20 @@ #!/usr/bin/env python # $Id: hbc,v 1.9 2012/03/29 02:08:36 andreas Exp $ -import sys, time, socket, os, signal, getopt, string, select +import sys +import time +import socket +import os +import signal +import getopt +import string +import select +import errno PORT=50003 INTERVAL=10 False=0 True=1 +DBG = False sock=None @@ -14,6 +23,60 @@ class NullDevice: pass + +class Flock: + def __init__(self, lock_file): + self.lock_file = lock_file + self.fd = None + self.opid = None + + def lock(self): + while 1: + self.fd = None + try: + self.fd = os.open(self.lock_file, os.O_CREAT | os.O_EXCL | os.O_RDWR) + except OSError, e: + if e.errno != errno.EEXIST: + raise + except: + raise + + if not self.fd: + if self.oproc(): + if DBG: print "process is alive" + os.remove(self.lock_file) + continue + else: + if DBG: print "no pid process??" + + if self.fd: + f=os.fdopen(self.fd, 'w').write("%s" % os.getpid()) + return self.fd + + + def unlock(self): + os.remove(self.lock_file) + self.fd=None + + + def setopid(self): + try: + self.opid=open(self.lock_file).readline() + except: + pass + + + def oproc(self): + self.setopid() + if not self.opid: + return False + try: + os.kill(int(self.opid), 0) + return True + except: + pass + return False + def handler(signum, frame): global up if up == 0: @@ -178,6 +241,9 @@ if len(msgboot) > 0: if msgonly: sys.exit(0) + +# +# if daemon: pid=os.fork() if pid > 0: @@ -197,6 +263,15 @@ if daemon: os.umask(0) +while True: + lock=Flock('/tmp/hbc.pid') + if lock.lock(): + break + if not lock.oproc(): + sys.exit(1) + os.kill(lock.opid,15) + time.sleep(1) + up=1 signal.signal(signal.SIGTERM, handler) signal.signal(signal.SIGHUP, handler) @@ -238,3 +313,4 @@ for hb_host in hb_hosts: socksend(msg, (hb_host, hb_port)) time.sleep(1) sock.close() +lock.unlock() diff --git a/hbd b/hbd index 57e550b..8926bf2 100755 --- a/hbd +++ b/hbd @@ -40,7 +40,7 @@ htab = {} msgs = [] num = 0 -upcount = 0 +#AEW upcount = 0 PORT = 50003 TPORT = 50004 THOST = "" @@ -52,11 +52,8 @@ GRACE = 2 os.environ['TZ'] = 'EST5EDT' -stdscr = None -win = None -msgw = None -msgwB = None -msgwHeight = 10 +tsfm=["%H","%d","%U"] +lastfm=["","",""] def handler(signum, frame): global running, sig @@ -100,7 +97,7 @@ class Host: self.interval = 0 self.doesack = -1 self.cmds = [] - self.hdwcounts = [0,0,0] + self.hdwcounts = [[0,0],[0,0],[0,0]] num += 1 @@ -114,7 +111,7 @@ class Host: try: a=self.hdwcounts except: - self.hdwcounts = [0,0,0] + self.hdwcounts = [[self.doesack,self.upcount],[self.doesack,self.upcount],[self.doesack,self.upcount]] def getstate(self): return self.state @@ -124,12 +121,26 @@ class Host: state = "%s" % self.state else: state = "%s" % self.state + return state + + def dispstats(self): if self.doesack != -1: if self.upcount > 0: - return "%s(%0.1f%%) %s %s " % (state, (self.doesack * 100.0) / self.upcount, self.doesack, self.upcount) +# return "(%0.1f%%) %s %s %s " % ((self.doesack * 100.0) / self.upcount, self.doesack, self.upcount, self.hdwcounts) + r = "" + for v in xrange(3): + a,u = self.hdwcounts[v] + if (self.upcount - u) != 0: + vs = "%0.0f" % (100.0 - (((self.doesack - a) * 100.0) / (self.upcount - u))) + if vs == "0": + vs="" + else: + vs="-" + r+= "
| Host | State | IP Addr | Last change | |||
|---|---|---|---|---|---|---|
| Host | State | Hr | Dy | Wk | IP Addr | Last change |
| %-24s | %-7s | %-16s | %-17s | |||
| %-24s | %-7s | %s%-16s | %-17s |