merge from:
[monitor.git] / unified_model.py
index 8c5fb7f..31b0ef6 100755 (executable)
@@ -2,22 +2,17 @@
 
 from monitor import database
 
-import plc
-api = plc.getAuthAPI()
-
-import mailer
+from monitor.wrapper import plc
+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)
-       
-       #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
@@ -235,7 +230,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 +259,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):
@@ -450,7 +446,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 +500,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 +510,7 @@ class Record(object):
                else:
                        print "takeAction: increasing penalty for %s"%self.hostname
                        pp.increase()
+               pp.index = index
                pp.apply(self.hostname)
                pp.save()
 
@@ -543,6 +540,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