pcucontrol owned in %files section
[monitor.git] / model.py
1 #
2
3 import time
4 from datetime import datetime, timedelta
5 import re
6
7 class MonRecord(object):
8         def __init__(self, data):
9                 self.keys = data.keys()
10                 self.keys.sort()
11                 self.__dict__.update(data)
12                 return
13
14         def get(self):
15                 ret= {}
16                 for k in self.keys:
17                         ret[k] = self.__dict__[k]
18                 return ret
19
20         def __repr__(self):
21                 str = ""
22                 str += self.host + "\n"
23                 for k in self.keys:
24                         if "message" in k or "msg" in k:
25                                 continue
26                         if 'time' in k:
27                                 s_time=time.strftime("%Y/%m/%d %H:%M:%S", 
28                                                         time.gmtime(self.__dict__[k]))
29                                 str += "\t'%s' : %s\n" % (k, s_time)
30                         else:
31                                 str += "\t'%s' : %s\n" % (k, self.__dict__[k])
32                 str += "\t--"
33                 return str
34
35         def delField(self, field):
36                 if field in self.__dict__:
37                         del self.__dict__[field]
38                 
39                 if field in self.keys:
40                         for i in range(0,len(self.keys)):
41                                 if self.keys[i] == field:
42                                         del self.keys[i]
43                                         break
44
45 class LogRoll:
46         def __init__(self, list=None):
47                 self.list = list
48                 if self.list == None:
49                         self.list = {}
50
51         def find(self, host, filter, timerange):
52                 if host not in self.list:
53                         return None
54
55                 host_log_list = self.list[host]
56                 for log in host_log_list:
57                         for key in filter.keys():
58                                 #print "searching key %s in log keys" % key
59                                 if key in log.keys:
60                                         #print "%s in log.keys" % key
61                                         cmp = re.compile(filter[key])
62                                         res = cmp.search(log.__getattribute__(key))
63                                         if res != None:
64                                                 #print "found match in log: %s  %s ~=~ %s" % (log, key, filter[key])
65                                                 if log.time > time.time() - timerange:
66                                                         print "returning log b/c it occured within time."
67                                                         return log
68                 return None
69                 
70
71         def get(self, host):
72                 if host in self.list:
73                         return self.list[host][0]
74                 else:
75                         return None
76
77         def add(self, log):
78                 if log.host not in self.list:
79                         self.list[log.host] = []
80
81                 self.list[log.host].insert(0,log)
82
83 class Log(MonRecord):
84         def __init__(self, host, data):
85                 self.host = host
86                 MonRecord.__init__(self, data)
87                 return
88
89         def __repr__(self):
90                 str = " "
91                 str += self.host + " : { "
92                 for k in self.keys:
93                         if "message" in k or "msg" in k:
94                                 continue
95                         if 'time' in k:
96                                 s_time=time.strftime("%Y/%m/%d %H:%M:%S", 
97                                                         time.gmtime(self.__dict__[k]))
98                                 #str += " '%s' : %s, " % (k, s_time)
99                         elif 'action' in k:
100                                 str += "'%s' : %s, " % (k, self.__dict__[k])
101                 str += "}"
102                 return str
103         
104
105 class Diagnose(MonRecord):
106         def __init__(self, host):
107                 self.host = host
108                 MonRecord.__init__(self, data)
109                 return
110
111