fix debugging

This commit is contained in:
Wolfgang Hottgenroth
2007-11-16 09:19:26 +01:00
parent c9e6c2f6b0
commit b370beb829
8 changed files with 63 additions and 36 deletions

View File

@ -1,14 +1,13 @@
CC=gcc
CFLAGS=-g CFLAGS=-g
all: yadync all: yadync
md5.o: md5.c md5.h %.o : %.c
$(CC) -c $(CFLAGS) $< -o $@
yadync.o: yadync.c md5.h
yadync: yadync.o md5.o yadync: yadync.o md5.o
clean: clean:
-rm *.o yadync -rm *.o yadync

View File

@ -38,10 +38,10 @@ int main(int argc, char **argv) {
md5_state_t state; md5_state_t state;
md5_init(&state); md5_init(&state);
md5_append(&state, buf, strlen(buf)); md5_append(&state, (const unsigned char *) buf, strlen(buf));
char c[16]; char c[16];
md5_finish(&state, c); md5_finish(&state, (unsigned char *) c);
sprintf(buf, "%s %d %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", sprintf(buf, "%s %d %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
dynid, t, dynid, t,

View File

@ -22,9 +22,6 @@ class MyCmd(cmd.Cmd):
self.intro = "Hello at the yadyn cli\n" self.intro = "Hello at the yadyn cli\n"
self.prompt = "yadyn> " self.prompt = "yadyn> "
def do_hello(self, l):
self.stdout.write("DO: %s\n" % l)
def do_list(self, l): def do_list(self, l):
try: try:
parts = l.split(' ') parts = l.split(' ')
@ -89,6 +86,20 @@ class MyCmd(cmd.Cmd):
except LocalMyCmdException, e: except LocalMyCmdException, e:
self.stdout.write("Failure: %s\n" % str(e.msg)) self.stdout.write("Failure: %s\n" % str(e.msg))
def do_debug(self, l):
try:
parts = l.split(' ')
if len(parts) != 1:
raise LocalMyCmdException("illegal number of arguments")
if parts[0] == 'on':
Logger.debugEnable()
elif parts[0] == 'off':
Logger.debugDisable()
else:
raise LocalMyCmdException("illegal argument")
except LocalMyCmdException, e:
self.stdout.write("Failure: %s\n" % str(e.msg))
def do_quit(self, l): def do_quit(self, l):
self.stdout.write("Bye\n") self.stdout.write("Bye\n")

View File

@ -24,7 +24,8 @@ class DnsHandler(threading.Thread):
while(True): while(True):
msg = self.msgQueue.get() msg = self.msgQueue.get()
name = msg.name dynid = msg.dynid
name = msg.name
zone = msg.zone zone = msg.zone
address = msg.address address = msg.address
@ -32,15 +33,15 @@ class DnsHandler(threading.Thread):
if self.statusMap.has_key(fullName): if self.statusMap.has_key(fullName):
if self.statusMap[fullName] != address: if self.statusMap[fullName] != address:
self.deleteARR(name, zone, self.statusMap[fullName]) self.deleteARR(dynid, name, zone, self.statusMap[fullName])
self.insertARR(name, zone, address) self.insertARR(dynid, name, zone, address)
self.statusMap[fullName] = address self.statusMap[fullName] = address
else: else:
self.insertARR(name, zone, address) self.insertARR(dynid, name, zone, address)
self.statusMap[fullName] = address self.statusMap[fullName] = address
def insertARR(self, name, zone, address): def insertARR(self, dynid, name, zone, address):
# send A-RR insertion for ip to DNS server # send A-RR insertion for ip to DNS server
rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address) rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address)
u = dns.update.Update(zone, keyring=self.keyring) u = dns.update.Update(zone, keyring=self.keyring)
@ -49,13 +50,15 @@ class DnsHandler(threading.Thread):
if r.rcode() != 0: if r.rcode() != 0:
# failure # failure
Logger.log("failure when inserting A-RR %s -> %s into %s" % (name, address, zone)) Logger.log("failure for %s when inserting A-RR %s -> %s into %s" %
(dynid, name, address, zone))
else: else:
# success # success
Logger.log("insert ARR %s -> %s into %s" % (name, address, zone)) Logger.log("insert for %s ARR %s -> %s into %s" %
(dynid, name, address, zone))
def deleteARR(self, name, zone, address): def deleteARR(self, dynid, name, zone, address):
# send A-RR deletion for ip to DNS server # send A-RR deletion for ip to DNS server
rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address) rr = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, address)
u = dns.update.Update(zone, keyring=self.keyring) u = dns.update.Update(zone, keyring=self.keyring)
@ -64,10 +67,12 @@ class DnsHandler(threading.Thread):
if r.rcode() != 0: if r.rcode() != 0:
# failure # failure
Logger.log("failure when deleting A-RR %s -> %s from %s" % (name, address, zone)) Logger.log("failure for %s when deleting A-RR %s -> %s from %s" %
(dynid, name, address, zone))
else: else:
# success # success
Logger.log("delete ARR %s -> %s from %s" % (name, address, zone)) Logger.log("delete for %s ARR %s -> %s from %s" %
(dynid, name, address, zone))

View File

@ -14,7 +14,7 @@ class DynHandler(threading.Thread):
event = self.eventq.get() event = self.eventq.get()
try: try:
event.prepare() event.prepare()
Logger.log("Processing event %s" % str(event)) Logger.debug("Processing event %s" % str(event))
event.process() event.process()
except Event.IllegalEventException, e: except Event.IllegalEventException, e:
Logger.log("Some failure: %s" % e.msg) Logger.log("Some failure: %s when processing event %s" % (e.msg, str(event)))

View File

@ -14,15 +14,15 @@ class Expirer(threading.Thread):
def run(self): def run(self):
while True: while True:
Logger.log("Expiring ...") Logger.debug("Expiring ...")
currentTime = int(time.time()) currentTime = int(time.time())
for entry in self.entries.values(): for entry in self.entries.values():
Logger.log("Checking %s" % str(entry)) Logger.debug("Checking %s" % str(entry))
if entry.lastEventTime != 0 and entry.lastEventTime + self.eventLifeTime < currentTime: if entry.lastEventTime != 0 and entry.lastEventTime + self.eventLifeTime < currentTime:
Logger.log("Entry %s expired" % entry.dynid) Logger.debug("Entry %s expired" % entry.dynid)
entry.lastEventTime = 0 entry.lastEventTime = 0
entry.address = self.nullAddress entry.address = self.nullAddress
Logger.log("Set in DNS: %s -> %s" % (entry.name, entry.address)) Logger.debug("Set in DNS: %s -> %s" % (entry.name, entry.address))
try: try:
self.dnsq.put_nowait(entry) self.dnsq.put_nowait(entry)
except Queue.Full, e: except Queue.Full, e:

View File

@ -2,25 +2,29 @@ import syslog
class Logger(object): class Logger(object):
@staticmethod
def log(data): def log(data):
syslog.syslog(syslog.LOG_INFO, data) syslog.syslog(syslog.LOG_INFO, data)
if Logger.debugFlag: if Logger.debugFlag:
print data print data
@staticmethod
def debug(data): def debug(data):
syslog.syslog(syslog.LOG_DEBUG, data)
if Logger.debugFlag: if Logger.debugFlag:
syslog.syslog(syslog.LOG_DEBUG, data)
print data print data
@staticmethod
def openlog(): def openlog():
syslog.openlog('hsc', syslog.LOG_PID, syslog.LOG_LOCAL0) syslog.openlog('yadyn', syslog.LOG_PID, syslog.LOG_LOCAL0)
@staticmethod
def debugEnable(): def debugEnable():
Logger.debugFlag = True Logger.debugFlag = True
log = staticmethod(log) @staticmethod
debug = staticmethod(debug) def debugDisable():
openlog = staticmethod(openlog) Logger.debugFlag = False
debugEnable = staticmethod(debugEnable)
debugFlag = False debugFlag = False

View File

@ -49,38 +49,46 @@ Logger.openlog()
if DEBUG: if DEBUG:
Logger.debugEnable() Logger.debugEnable()
Logger.log("yadyn starting")
entries = shelve.open(ENTRIES_FILE, flag='c', writeback=True) entries = shelve.open(ENTRIES_FILE, flag='c', writeback=True)
statusMap = shelve.open(STATUSMAP_FILE, flag='c', writeback=True) statusMap = shelve.open(STATUSMAP_FILE, flag='c', writeback=True)
Logger.debug("Shelves opened")
try: try:
eventq = Queue.Queue() eventq = Queue.Queue()
dnsq = Queue.Queue() dnsq = Queue.Queue()
Logger.debug("Queues created")
Event.Event.setParams(entries, MSG_TIME_CORRIDOR, dnsq) Event.Event.setParams(entries, MSG_TIME_CORRIDOR, dnsq)
dynHandler = DynHandler.DynHandler(eventq) dynHandler = DynHandler.DynHandler(eventq)
dynHandler.start() dynHandler.start()
Logger.debug("DynHandler started")
dnsHandler = DnsHandler.DnsHandler(dnsq, TSIGKEY, NAMESERVER, TTL, statusMap) dnsHandler = DnsHandler.DnsHandler(dnsq, TSIGKEY, NAMESERVER, TTL, statusMap)
dnsHandler.start() dnsHandler.start()
Logger.debug("DnsHandler started")
dynReceiver = DynReceiver.DynReceiver(("", 8053), eventq) dynReceiver = DynReceiver.DynReceiver(("", 8053), eventq)
dynReceiver.start() dynReceiver.start()
Logger.debug("DynReceiver started")
expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS, EXPIRY_PERIOD, dnsq) expirer = Expirer.Expirer(entries, EVENT_LIFE_TIME, NULL_ADDRESS, EXPIRY_PERIOD, dnsq)
expirer.start() expirer.start()
Logger.debug("Expirer started")
cmdReceiver = CmdReceiver.CmdReceiver(("", 8023), entries, ADMIN_PWD) cmdReceiver = CmdReceiver.CmdReceiver(("", 8023), entries, ADMIN_PWD)
cmdReceiver.start() cmdReceiver.start()
Logger.debug("CmdReceiver started")
Logger.log("yadyn running")
while True: while True:
entries.sync() entries.sync()
statusMap.sync() statusMap.sync()
time.sleep(10) time.sleep(10)
finally: finally:
Logger.log("Closing shelves")
entries.close() entries.close()
statusMap.close() statusMap.close()
Logger.debug("Shelves closed")
Logger.log("yadyn terminating")