From: Stephen Soltesz Date: Mon, 19 May 2008 18:43:26 +0000 (+0000) Subject: Adding the model for log records X-Git-Tag: Monitor-1.0-5~20 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;ds=sidebyside;h=f1f4b19f2db4df58617fb06046914f51b6805f7d;p=monitor.git Adding the model for log records --- diff --git a/model.py b/model.py new file mode 100644 index 0000000..3628c00 --- /dev/null +++ b/model.py @@ -0,0 +1,123 @@ +# + +import time +from datetime import datetime, timedelta +import re + +class MonRecord(object): + def __init__(self, data): + self.keys = data.keys() + self.keys.sort() + self.__dict__.update(data) + return + + def get(self): + ret= {} + for k in self.keys: + ret[k] = self.__dict__[k] + return ret + + def __repr__(self): + str = "" + str += self.host + "\n" + for k in self.keys: + if "message" in k or "msg" in k: + continue + if 'time' in k: + s_time=time.strftime("%Y/%m/%d %H:%M:%S", + time.gmtime(self.__dict__[k])) + str += "\t'%s' : %s\n" % (k, s_time) + else: + str += "\t'%s' : %s\n" % (k, self.__dict__[k]) + str += "\t--" + return str + + def delField(self, field): + if field in self.__dict__: + del self.__dict__[field] + + if field in self.keys: + for i in range(0,len(self.keys)): + if self.keys[i] == field: + del self.keys[i] + break + +class LogRoll: + def __init__(self, list=None): + self.list = list + if self.list == None: + self.list = {} + + def find(self, host, filter, timerange): + if host not in self.list: + return None + + host_log_list = self.list[host] + for log in host_log_list: + for key in filter.keys(): + #print "searching key %s in log keys" % key + if key in log.keys: + #print "%s in log.keys" % key + cmp = re.compile(filter[key]) + res = cmp.search(log.__getattribute__(key)) + if res != None: + print "found match in log: %s %s ~=~ %s" % (log, key, filter[key]) + if log.time > time.time() - timerange: + print "returning log b/c it occured within time." + return log + return None + + + def get(self, host): + if host in self.list: + return self.list[host][0] + else: + return None + + def add(self, log): + if log.host not in self.list: + self.list[log.host] = [] + + self.list[log.host].insert(0,log) + +class Log(MonRecord): + def __init__(self, host, data): + self.host = host + MonRecord.__init__(self, data) + return + + def __repr__(self): + str = " " + str += self.host + " : { " + for k in self.keys: + if "message" in k or "msg" in k: + continue + if 'time' in k: + s_time=time.strftime("%Y/%m/%d %H:%M:%S", + time.gmtime(self.__dict__[k])) + #str += " '%s' : %s, " % (k, s_time) + elif 'action' in k: + str += "'%s' : %s, " % (k, self.__dict__[k]) + str += "}" + return str + + +class Diagnose(MonRecord): + def __init__(self, host): + self.host = host + MonRecord.__init__(self, data) + return + +class Action(MonRecord): + def __init__(self, host, data): + self.host = host + MonRecord.__init__(self, data) + return + + def deltaDays(self, delta): + t = datetime.fromtimestamp(self.__dict__['time']) + d = t + timedelta(delta) + self.__dict__['time'] = time.mktime(d.timetuple()) + + +