- fix UP/DOWN summary on nodes page.
[monitor.git] / monitor / database / info / interface.py
index e9a08a6..8e3b1fb 100644 (file)
@@ -1,11 +1,13 @@
 
-from monitor import reboot
 from monitor.common import *
 from monitor.model import *
 from monitor.wrapper import plc
 from monitor.wrapper import plccache
 from monitor.wrapper.emailTxt import mailtxt
 from monitor.database.info.model import *
+# NOTE: must import this after monitor.database.info.model b/c that imports
+#      pcucontro.reboot and blocks this version, if it comes last.
+from monitor import reboot
 
 class SiteInterface(HistorySiteRecord):
        @classmethod
@@ -60,7 +62,9 @@ class SiteInterface(HistorySiteRecord):
 
                return
 
-       def pausePenalty(self):
+       def setPenaltyPause(self):
+               self.db.penalty_pause = True
+               self.db.penalty_pause_time = datetime.now()
                act = ActionRecord(loginbase=self.db.loginbase,
                                                        action='penalty',
                                                        action_type='pause_penalty',)
@@ -69,6 +73,11 @@ class SiteInterface(HistorySiteRecord):
                #act = ActionRecord(loginbase=self.db.loginbase, action='penalty', action_type='clear_penalty',)
                self.db.penalty_level = 0
                self.db.penalty_applied = False
+               self.clearPenaltyPause()
+
+       def clearPenaltyPause(self):
+               self.db.penalty_pause = False
+               self.db.penalty_pause_time = None
        
        def getTicketStatus(self):
                if self.db.message_id != 0:
@@ -76,6 +85,7 @@ class SiteInterface(HistorySiteRecord):
                        self.db.message_status = rtstatus['Status']
                        self.db.message_queue = rtstatus['Queue']
                        self.db.message_created = datetime.fromtimestamp(rtstatus['Created'])
+                       #self.db.message_last_reply = datetime.fromtimestamp(rtstatus['Told'])
 
        def setTicketStatus(self, status):
                print 'SETTING status %s' % status
@@ -112,7 +122,7 @@ class SiteInterface(HistorySiteRecord):
                #       those errors.
                
                args = {'loginbase' : self.db.loginbase, 
-                               'penalty_level' : self.db.penalty_level,
+                               'penalty_level' : -self.db.penalty_level,
                                'monitor_hostname' : config.MONITOR_HOSTNAME,
                                'support_email'   : config.support_email,
                                'plc_name' : config.PLC_NAME,
@@ -127,6 +137,7 @@ class SiteInterface(HistorySiteRecord):
 
                        message = getattr(mailtxt, type)
 
+                       ccemail = False
                        saveact = True
                        viart = True
                        if 'viart' in kwargs: 
@@ -136,6 +147,9 @@ class SiteInterface(HistorySiteRecord):
                        if 'saveact' in kwargs: 
                                saveact = kwargs['saveact']
 
+                       if 'ccemail' in kwargs: 
+                               ccemail = kwargs['ccemail']
+
                        if viart:
                                self.getTicketStatus()          # get current message status
                                if self.db.message_status not in ['open', 'new']:
@@ -143,8 +157,10 @@ class SiteInterface(HistorySiteRecord):
 
                        m = Message(message[0] % args, message[1] % args, viart, self.db.message_id)
 
-                       contacts = self.getContacts()
-                       #contacts = [config.cc_email]
+                       if ccemail:
+                               contacts = [config.exception_email]
+                       else:
+                               contacts = self.getContacts()
 
                        print "sending message: %s to site %s for host %s" % (type, self.db.loginbase, hostname)
 
@@ -177,7 +193,7 @@ class SiteInterface(HistorySiteRecord):
        def runBootManager(self, hostname):
                from monitor import bootman
                print "attempting BM reboot of %s" % hostname
-               ret = ""
+               ret = "error"
                try:
                        ret = bootman.restore(self, hostname)
                        err = ""
@@ -185,10 +201,19 @@ class SiteInterface(HistorySiteRecord):
                        err = traceback.format_exc()
                        print err
 
+               # TODO: keep this record so that the policy.py can identify all
+               #               bootmanager_* actions without explicitly listing every kind.
                act = ActionRecord(loginbase=self.db.loginbase,
                                                        hostname=hostname,
                                                        action='reboot',
                                                        action_type='bootmanager_restore',
+                                                       error_string="")
+
+               if ret:
+                       act = ActionRecord(loginbase=self.db.loginbase,
+                                                       hostname=hostname,
+                                                       action='reboot',
+                                                       action_type='bootmanager_' + ret,
                                                        error_string=err)
                return ret