From e12b524c0cbec02f9bbe8470fe1d4657d7653f5d Mon Sep 17 00:00:00 2001 From: Andreas Wrede Date: Tue, 12 Jan 2016 21:37:27 +0100 Subject: [PATCH] update dns ina thread --- hbd | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/hbd b/hbd index 72e689a..67411e4 100755 --- a/hbd +++ b/hbd @@ -21,6 +21,7 @@ import traceback import urllib import httplib import threading +import Queue from subprocess import Popen, STDOUT, PIPE @@ -200,7 +201,7 @@ def pushover(msg): # nsupdate: set the DNS A record for a fqdn # return: None if ok, else error text def nsupdate(hostname, newip): - u = {} + D = {} D['domain'] = 'dy.wapanafa.org' D['fqdn'] = '%s.dy.wapanafa.org' % hostname D['dnsttl'] = '5' @@ -318,6 +319,19 @@ def log(m, service="heartbeat"): pickleit() +def dnsupdatethread(): + while True: + name, addr = dnsQ.get() + m = "%s changed address to %s" % (name, addr) + err = nsupdate(name, addr) + if err: + m += ", DNS failed: %s" % err + email("error: nsupdate failed", m) + else: + m += ", DNS updated." + dnsQ.task_done() + log(m) + # # def fromaddr(name, addr, boot, interval, acks): @@ -337,13 +351,9 @@ def fromaddr(name, addr, boot, interval, acks): htab[addr] = name m = "%s changed address to %s" % (host.name, addr) 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 - email("error: nsupdate failed", m) - else: - m += ", DNS updated." - log(m) + dnsQ.put((name, addr)) + else: + log(m) if name in watchhosts: email("address change", m) pushover(m) @@ -837,6 +847,7 @@ ilist.append(sock6) serv = HttpServer((hbd_host, hbd_port), HttpHandler) servthread = threading.Thread(target=serv.serve_forever) +servthread.daemon = True servthread.start() #ilist.append(serv.fileno()) @@ -859,6 +870,11 @@ if not forground: os.setsid() os.umask(0) +dnsQ = Queue.Queue() +dnsT = threading.Thread(target=dnsupdatethread) +dnsT.daemon = True +dnsT.start() + running = True sig = 0 #signal.signal(signal.SIGTERM, handler)