add a conversion class for datetime and time stamps, since I need this all the time.
[monitor.git] / monitor / common.py
index 9878d52..08a6d99 100644 (file)
@@ -3,8 +3,8 @@ import time
 import struct
 from monitor import reboot
 from monitor import util
 import struct
 from monitor import reboot
 from monitor import util
-from monitor import database
-from monitor.wrapper import plc, plccache
+from monitor import query
+from monitor.wrapper import plc
 
 from datetime import datetime, timedelta
 from monitor.model import Message
 
 from datetime import datetime, timedelta
 from monitor.model import Message
@@ -43,12 +43,17 @@ def get_current_state(fbnode):
        return l
 
 def color_pcu_state(fbnode):
        return l
 
 def color_pcu_state(fbnode):
+       if fbnode['plc_pcuid'] is None:
+               return 'NOPCU'
+       else:
+               return 'PCU'
 
        if 'plcnode' in fbnode and 'pcu_ids' in fbnode['plcnode'] and len(fbnode['plcnode']['pcu_ids']) > 0 :
                values = reboot.get_pcu_values(fbnode['plcnode']['pcu_ids'][0])
                if values == None:
                        return fbnode['pcu']
        else:
 
        if 'plcnode' in fbnode and 'pcu_ids' in fbnode['plcnode'] and len(fbnode['plcnode']['pcu_ids']) > 0 :
                values = reboot.get_pcu_values(fbnode['plcnode']['pcu_ids'][0])
                if values == None:
                        return fbnode['pcu']
        else:
+               print fbnode.keys()
                if 'pcu' not in fbnode:
                        return 'NOPCU'
                else:
                if 'pcu' not in fbnode:
                        return 'NOPCU'
                else:
@@ -187,6 +192,7 @@ def get_nodeset(config):
                Given the config values passed in, return the set of hostnames that it
                evaluates to.
        """
                Given the config values passed in, return the set of hostnames that it
                evaluates to.
        """
+       from monitor.wrapper import plccache
        api = plc.getAuthAPI()
        l_nodes = plccache.l_nodes
 
        api = plc.getAuthAPI()
        l_nodes = plccache.l_nodes
 
@@ -208,21 +214,26 @@ def get_nodeset(config):
        # perform this query after the above options, so that the filter above
        # does not break.
        if config.nodeselect:
        # perform this query after the above options, so that the filter above
        # does not break.
        if config.nodeselect:
-               fbquery = FindbadNodeRecord.get_all_latest()
+               fbquery = HistoryNodeRecord.query.all()
                node_list = [ n.hostname for n in fbquery ]
                node_list = [ n.hostname for n in fbquery ]
-               l_nodes = node_select(config.nodeselect, node_list, None)
+               l_nodes = query.node_select(config.nodeselect, node_list, None)
 
        return l_nodes
 
 
        return l_nodes
 
-def email_exception(content=None):
+def email_exception(content=None, title=None):
     import config
     from monitor.model import Message
     import traceback
     msg=traceback.format_exc()
     if content:
         msg = content + "\n" + msg
     import config
     from monitor.model import Message
     import traceback
     msg=traceback.format_exc()
     if content:
         msg = content + "\n" + msg
-    m=Message("exception running monitor", msg, False)
-    m.send([config.cc_email])
+
+    full_title = "exception running monitor"
+    if title:
+        full_title = "exception running monitor %s" % title
+
+    m=Message(full_title, msg, False)
+    m.send([config.exception_email])
     return
 
 def changed_lessthan(last_changed, days):
     return
 
 def changed_lessthan(last_changed, days):
@@ -234,6 +245,9 @@ def changed_lessthan(last_changed, days):
                return False
 
 def changed_greaterthan(last_changed, days):
                return False
 
 def changed_greaterthan(last_changed, days):
+       if last_changed is None:
+               return False
+
        if datetime.now() - last_changed > timedelta(days):
                #print "last changed more than %s" % timedelta(days)
                return True
        if datetime.now() - last_changed > timedelta(days):
                #print "last changed more than %s" % timedelta(days)
                return True
@@ -264,3 +278,14 @@ def found_within(recent_actions, action_type, within):
        print "%s NOT found_within %s in recent_actions" % (action_type, timedelta(within) )
        return False
        
        print "%s NOT found_within %s in recent_actions" % (action_type, timedelta(within) )
        return False
        
+
+class Time:
+    @classmethod
+    def dt_to_ts(cls, dt):
+        t = time.mktime(dt.timetuple())
+        return t
+
+    @classmethod
+    def ts_to_dt(cls, ts):
+        d = datetime.fromtimestamp(ts)
+        return d