From 6dd7098a4fba83997f8020cfd21160c687d285d5 Mon Sep 17 00:00:00 2001 From: Andreas Wrede Date: Mon, 4 Jan 2016 18:57:13 +0100 Subject: [PATCH] write http client response in one io; more debug prints --- hbd | 108 +++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 31 deletions(-) diff --git a/hbd b/hbd index 8926bf2..eefeec7 100755 --- a/hbd +++ b/hbd @@ -26,8 +26,8 @@ from subprocess import Popen, STDOUT, PIPE SEND_EMAIL=False SEND_PUSHOVER=True -False = 0 -True = 1 +DEBUG = 0 + LOGFILE = "/home/andreas/public_html/messages/andreas" PICKFILE = "/var/tmp/hbd.pick" AEMAIL = ["andreas@wrede.ca"] @@ -44,7 +44,7 @@ num = 0 PORT = 50003 TPORT = 50004 THOST = "" -DEBUG = False + verbose = False INTERVAL = 10 @@ -60,11 +60,11 @@ def handler(signum, frame): sig = signum if not running: if verbose: - print "NOT runing signal: %s running: %d" % (sig, running) - return + sys.stderr.write("NOT runing signal: %s running: %d" % (sig, running)) + sys.exit(2) # signal.signal(sig, handler) if verbose: - print "signal: %s running: %s frame: %s" % (sig, running, frame) + sys.stderr.write("signal: %s running: %s frame: %s" % (sig, running, frame)) running = False # sys.exit(0) @@ -78,6 +78,12 @@ class NullDevice: def write(self, s): pass +class Addr: + def __init__(self, a4, a6): + self.a4 = a4 + self.a6 = a6 + + class Host: up = "up" @@ -136,11 +142,11 @@ class Host: vs="" else: vs="-" - r+= "%s" % vs + r+= '%s' % vs return r else: return "(%s)" % (self.doesack) - return "N/A>" + return 'N/A>' # set new state, return number of secs in previous state def newstate(self, state, when=0): @@ -162,7 +168,7 @@ def email(s, msg): body = "To: %s\nFrom: %s\nSubject: %s\nDate: %s\n\n%s" % (toaddrs[0], fromaddr, subj, date, msg) try: server = smtplib.SMTP(SMTPSERVER) - if DEBUG: + if DEBUG > 0: server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs, body) except smtplib.SMTPRecipientsRefused, errs: @@ -202,7 +208,17 @@ def nsupdate(hostname, newip): D['dnsttl'] = '5' D['newip'] = newip D['ts'] = time.strftime('%Y-%m-%d.%H:%M:%S', time.gmtime()) - nsup = """update delete %(fqdn)s A + if newip.find(":") > 0: + nsup = """update delete %(fqdn)s AAAA +update add %(fqdn)s %(dnsttl)s AAAA %(newip)s +update delete %(fqdn)s TXT +update add %(fqdn)s %(dnsttl)s TXT "Created: %(ts)s" +send +answer + +""" % D + else: + nsup = """update delete %(fqdn)s A update add %(fqdn)s %(dnsttl)s A %(newip)s update delete %(fqdn)s TXT update add %(fqdn)s %(dnsttl)s TXT "Created: %(ts)s" @@ -210,9 +226,10 @@ send answer """ % D -# log("DBG: nsup %s" % nsup) + + if DEBUG > 0: log("DBG: nsup %s" % nsup) cmd = ["/usr/local/bin/nsupdate", "-k", "/etc/dhcpc/K%(domain)s.+157+00000." % D, "-v"] -# log("DBG: cmd %s" % cmd) + if DEBUG > 0: log("DBG: cmd %s" % cmd) try: p = Popen(cmd, shell=False, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=STDOUT) except OSError, e: @@ -261,7 +278,7 @@ def addhost(name, addr): # def on_exit(): - if DEBUG: + if DEBUG > 0: sys.stderr.write("on_exit\n") logf.close() print "exit" @@ -289,7 +306,7 @@ def checkoverdue(): def log(m, service="heartbeat"): - if DEBUG: print "Log: %s" % m + if DEBUG > 0: print "Log: %s" % m msg = time.strftime("%b %d %H:%M:%S", time.localtime(time.time()))+": "+m+"\n" msgs.append(msg) if logfmt == "msg": @@ -319,7 +336,7 @@ def fromaddr(name, addr, boot, interval, acks): host.addr = addr htab[addr] = name m = "%s changed address to %s" % (host.name, addr) - if name in dyndnshosts: + if name in dyndnshosts and not ":" in addr: # don't try and cat ptr to IPv6 addr err = nsupdate(name, addr) if err: m += ", DNS failed: %s" % err @@ -350,7 +367,11 @@ def fromaddr(name, addr, boot, interval, acks): # def readsock(sock): global htab + if DEBUG > 3: + sys.stderr.write("readsock recfrom start") data, addr = sock.recvfrom(1024) + if DEBUG > 2: + sys.stderr.write("readsock = %s, %s\n" % (data,addr)) pairs = string.split(data, ';') boot = 0 shutdown = 0 @@ -434,8 +455,8 @@ def readsock(sock): log("%s command initiated" % name) try: ss=sock.sendto(rmsg, addr) - if DEBUG: - log("msg from %s,%s, sent %s bytes back" % (addr[0], addr[1], ss)) + if DEBUG > 2: + print "msg from %s,%s, sent %s bytes back" % (addr[0], addr[1], ss) except: pass @@ -458,7 +479,7 @@ class HtmlHandler(SocketServer.BaseRequestHandler): if refresh: res.append("\n" % refresh) res.append("") - res.append('') + res.append('') return res def buildpage(self): @@ -504,7 +525,10 @@ class HtmlHandler(SocketServer.BaseRequestHandler): uri = '/unknown' f = self.request.makefile() while 1: - line = string.strip(f.readline()) + try: + line = string.strip(f.readline()) + except: + line = '' if len(line) == 0: break r = line.split() @@ -517,6 +541,8 @@ class HtmlHandler(SocketServer.BaseRequestHandler): else: uarg=string.split(upar[1],"&") + if DEBUG > 2: + sys.stderr.write("handle = %s\n" % (uri)) code = 200 cause = "OK" if uri == "/": @@ -583,23 +609,40 @@ class HtmlHandler(SocketServer.BaseRequestHandler): res=self.builderror(code, cause, "The requested URL was not found on this server.") - self.request.send("HTTP/1.0 %s %s\r\n" % (code, cause)) + tosend = ["HTTP/1.0 %s %s\r" % (code, cause)] for h in headers: - self.request.send("%s\r\n" % h) - self.request.send("\r\n") + tosend.append("%s\r" % h) + tosend.append("\r") +# self.request.send("HTTP/1.0 %s %s\r\n" % (code, cause)) +# for h in headers: +# self.request.send("%s\r\n" % h) +# self.request.send("\r\n") + tosend += res try: - self.request.send(string.join(res, "\n")) + self.request.send(string.join(tosend, "\n")) except: pass def saveandrestart(): - sock.close() - sock6.close() -# serv.shutdown() #N.B. dont shutdown() as we don't use serv_forever - serv.server_close() + try: + sock.close() + except: + pass + try: + sock6.close() + except: + pass + try: + serv.server_close() + except: + pass log("restarting") + try: + logf.close() + except: + pass os.execv(sys.argv[0], [sys.argv[0]]+cmdargs) @@ -801,7 +844,8 @@ next = int(now)+15 # 15 seconds time to settle after (re-)start sleep = next - now while running: - if DEBUG: + sr = None + if DEBUG > 2: sys.stderr.write("about to sleep = %s\n" % (sleep)) try: sr = select.select(ilist, [], [], sleep) @@ -816,6 +860,8 @@ while running: continue except: sys.exit(1) + if DEBUG > 2: + sys.stderr.write("woke from sleep = %s (%s)\n" % (str(sr), str(ilist))) for fh in sr[0]: if fh in [sock, sock6]: readsock(fh) @@ -841,11 +887,11 @@ while running: if sleep < 0: sys.stderr.write("sleep is negaitive! %s next = %s\n" % (sleep, next)) sleep = 0 - if DEBUG: + if DEBUG > 2: sys.stderr.write("sleep = %s next = %s\n" % (sleep, next)) if sig == signal.SIGHUP: - if DEBUG: - sys.stderr.write("signal 1 exit\n") + if DEBUG > 0: + sys.stderr.write("signal 1 saveandrestart\n") saveandrestart()