X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=unified_model.py;h=df4024e958d3e7885114e19b489a814097a8b28b;hb=refs%2Fheads%2F1.0;hp=8c5fb7f408dc267aafed2dd4b28dac3cbc1b5b7b;hpb=ee740a3ff286a9720cd1656cd60a3c85f0f14b29;p=monitor.git diff --git a/unified_model.py b/unified_model.py index 8c5fb7f..df4024e 100755 --- a/unified_model.py +++ b/unified_model.py @@ -3,8 +3,6 @@ from monitor import database import plc -api = plc.getAuthAPI() - import mailer import time @@ -15,9 +13,6 @@ import config def gethostlist(hostlist_file): return util.file.getListFromFile(hostlist_file) - - #nodes = api.GetNodes({'peer_id' : None}, ['hostname']) - #return [ n['hostname'] for n in nodes ] def array_to_priority_map(array): """ Create a mapping where each entry of array is given a priority equal @@ -41,7 +36,11 @@ def cmpValMap(v1, v2, map): raise Exception("No index %s or %s in map" % (v1, v2)) def cmpCategoryVal(v1, v2): - map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ]) + # Terrible hack to manage migration to no more 'ALPHA' states. + if v1 == 'ALPHA': v1 = "PROD" + if v2 == 'ALPHA': v2 = "PROD" + #map = array_to_priority_map([ None, 'PROD', 'ALPHA', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ]) + map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDPROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ]) return cmpValMap(v1,v2,map) @@ -235,7 +234,7 @@ class PersistMessage(Message): #print "creating new object" obj = super(PersistMessage, typ).__new__(typ, [id, subject, message, via_rt], **kwargs) obj.id = id - obj.actiontracker = Recent(3*60*60*24) + obj.actiontracker = Recent(1*60*60*24) obj.ticket_id = None if 'ticket_id' in kwargs and kwargs['ticket_id'] is not None: @@ -264,6 +263,7 @@ class PersistMessage(Message): self.save() else: # NOTE: only send a new message every week, regardless. + # NOTE: can cause thank-you messages to be lost, for instance when node comes back online within window. print "Not sending to host b/c not within window of %s days" % (self.actiontracker.withintime // (60*60*24)) class MonitorMessage(object): @@ -355,7 +355,7 @@ class PersistSitePenalty(SitePenalty): #print pm if id in pm: - print "Using existing object" + print "PersistSitePenalty Using existing object" obj = pm[id] else: print "creating new object" @@ -428,7 +428,11 @@ class Record(object): def severity(self): category = self.data['category'] prev_category = self.data['prev_category'] - #print "SEVERITY: ", category, prev_category + print "SEVERITY: ", category, prev_category + try: + print "SEVERITY state: ", self.data['state'], self.data['prev_state'] + except: + print "SEVERITY state: unknown unknown" val = cmpCategoryVal(category, prev_category) return val @@ -450,7 +454,7 @@ class Record(object): def getDaysDown(cls, diag_record): daysdown = -1 - if diag_record['comonstats']['uptime'] != "null": + if diag_record['comonstats']['uptime'] != "null" and diag_record['comonstats']['uptime'] != "-1": daysdown = - int(float(diag_record['comonstats']['uptime'])) // (60*60*24) #elif diag_record['comonstats']['sshstatus'] != "null": # daysdown = int(diag_record['comonstats']['sshstatus']) // (60*60*24) @@ -504,7 +508,7 @@ class Record(object): # return "%d days up"% -daysdown #getStrDaysDown = classmethod(getStrDaysDown) - def takeAction(self): + def takeAction(self, index=0): pp = PersistSitePenalty(self.hostname, 0, db='persistpenalty_hostnames') if 'improvement' in self.data['stage'] or self.improved() or \ 'monitor-end-record' in self.data['stage']: @@ -514,6 +518,8 @@ class Record(object): else: print "takeAction: increasing penalty for %s"%self.hostname pp.increase() + print "takeAction: applying penalty to %s as index %s"% (self.hostname, index) + pp.index = index pp.apply(self.hostname) pp.save() @@ -543,6 +549,8 @@ class Record(object): self.data['message'][1] % self.data['args'], True, db='monitor_persistmessages', ticket_id=ticket_id) + if self.data['stage'] == "improvement": + message.reset() return message else: return None @@ -560,14 +568,17 @@ class Record(object): if ADMIN & roles: contacts += [config.email] if TECH & roles: - contacts += [TECHEMAIL % self.loginbase] + #contacts += [TECHEMAIL % self.loginbase] + contacts += plc.getTechEmails(self.loginbase) if PI & roles: - contacts += [PIEMAIL % self.loginbase] + #contacts += [PIEMAIL % self.loginbase] + contacts += plc.getPIEmails(self.loginbase) if USER & roles: + contacts += plc.getSliceUserEmails(self.loginbase) slices = plc.slices(self.loginbase) if len(slices) >= 1: - for slice in slices: - contacts += [SLICEMAIL % slice] + #for slice in slices: + # contacts += [SLICEMAIL % slice] print "SLIC: %20s : %d slices" % (self.loginbase, len(slices)) else: print "SLIC: %20s : 0 slices" % self.loginbase