X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=unified_model.py;h=805dd0e5cb9077879e46598160e266c39848405b;hb=90b2e8e7cb145cb1f6b3780867617084441b6ca9;hp=e237bc9c6dde5dfa15512e733a90316dca7f3610;hpb=6df6b8cf9b9a5e78f4f68445e1b2dabc2ae272e6;p=monitor.git diff --git a/unified_model.py b/unified_model.py index e237bc9..805dd0e 100755 --- a/unified_model.py +++ b/unified_model.py @@ -2,14 +2,14 @@ from monitor import database -import plc -import mailer +from monitor.wrapper import plc, plccache +from monitor.wrapper import mailer import time from model import * -from const import * -import util.file -import config +from monitor.const import * +from monitor import util +from monitor import config def gethostlist(hostlist_file): return util.file.getListFromFile(hostlist_file) @@ -65,8 +65,6 @@ class PenaltyMap: # condition/penalty is applied, move to the next phase. -#fb = database.dbLoad("findbad") - class RT(object): def __init__(self, ticket_id = None): self.ticket_id = ticket_id @@ -230,7 +228,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: @@ -259,6 +257,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): @@ -409,7 +408,7 @@ class Record(object): def __init__(self, hostname, data): self.hostname = hostname self.data = data - self.plcdb_hn2lb = database.dbLoad("plcdb_hn2lb") + self.plcdb_hn2lb = plccache.plcdb_hn2lb self.loginbase = self.plcdb_hn2lb[self.hostname] return @@ -489,15 +488,27 @@ class Record(object): return daysdown getStrDaysDown = classmethod(getStrDaysDown) - #def getStrDaysDown(cls, diag_record): - # daysdown = cls.getDaysDown(diag_record) - # if daysdown > 0: - # return "%d days down"%daysdown - # elif daysdown == -1: - # return "Never online" - # else: - # return "%d days up"% -daysdown - #getStrDaysDown = classmethod(getStrDaysDown) + def getSendEmailFlag(self): + if not config.mail: + return False + + # resend if open & created longer than 30 days ago. + if 'rt' in self.data and \ + 'Status' in self.data['rt'] and \ + "open" in self.data['rt']['Status'] and \ + self.data['rt']['Created'] > int(time.time() - 60*60*24*30): + # if created-time is greater than the thirty days ago from the current time + return False + + return True + + def getMostRecentStage(self): + lastact = self.data['last_action_record'] + return lastact.stage + + def getMostRecentTime(self): + lastact = self.data['last_action_record'] + return lastact.date_action_taken def takeAction(self, index=0): pp = PersistSitePenalty(self.hostname, 0, db='persistpenalty_hostnames') @@ -523,7 +534,7 @@ class Record(object): hlist = " %s %s - %s\n" % (info[0], info[2], info[1]) #(node,ver,daysdn) return hlist def saveAction(self): - if 'save-act-all' in self.data and self.data['save-act-all'] == True: + if 'save_act_all' in self.data and self.data['save_act_all'] == True: return True else: return False @@ -539,6 +550,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 @@ -576,79 +589,6 @@ class NodeRecord: self.hostname = hostname self.ticket = None self.target = target - #if hostname in fb['nodes']: - # self.data = fb['nodes'][hostname]['values'] - #else: - # raise Exception("Hostname not in scan database") - - def stageIswaitforever(self): - if 'waitforever' in self.data['stage']: - return True - else: - return False - - def severity(self): - category = self.data['category'] - prev_category = self.data['prev_category'] - print "IMPROVED: ", category, prev_category - val = cmpCategoryVal(category, prev_category) - return val - - def improved(self): - return self.severity() > 0 - - def end_record(self): - return node_end_record(self.hostname) - - def reset_stage(self): - self.data['stage'] = 'findbad' - return True - - def open_tickets(self): - if self.ticket and self.ticket.status['status'] == 'open': - return 1 - return 0 - def setIntrospect(self): - pass - - def email_notice(self): - message = self._get_message_for_condition() - message.send(self._get_contacts_for_condition()) - return True - def close_ticket(self): - if self.ticket: - self.ticket.closeTicket() - - def exempt_from_penalties(self): - bl = database.dbLoad("l_blacklist") - return self.hostname in bl - - def penalties(self): - return [] - def escellate_penalty(self): - return True - def reduce_penalty(self): - return True - - - def atTarget(self): - return self.target.verify(self.data) - - def _get_condition(self): - return self.data['category'].lower() - - def _get_stage(self): - "improvement" - "firstnotice_noop" - "secondnotice_noslicecreation" - "thirdnotice_disableslices" - - delta = current_time - self.data['time'] - - def _get_message_for_condition(self): - pass - def _get_contacts_for_condition(self): - pass class Action(MonRecord): def __init__(self, host, data):