remove unnecessary informatiton on pcuview page
[monitor.git] / monitor / common.py
index 051cd61..da174d8 100644 (file)
@@ -1,14 +1,14 @@
 
 import time
 import struct
 
 import time
 import struct
-from pcucontrol import reboot
-
+from monitor import reboot
 from monitor import util
 from monitor import database
 from monitor import util
 from monitor import database
-from monitor.wrapper import plc, plccache
+from monitor.wrapper import plc
 
 
-from datetime import datetime 
-from monitor.model import PersistFlags
+from datetime import datetime, timedelta
+from monitor.model import Message
+from monitor.database.info import HistoryNodeRecord
 
 esc = struct.pack('i', 27)
 RED    = esc + "[1;31m"
 
 esc = struct.pack('i', 27)
 RED    = esc + "[1;31m"
@@ -58,26 +58,26 @@ def color_pcu_state(fbnode):
                rb = values['reboot']
                if rb == 0 or rb == "0":
                        return fbnode['pcu'] + "OK  "
                rb = values['reboot']
                if rb == 0 or rb == "0":
                        return fbnode['pcu'] + "OK  "
-                       #return fbnode['pcu'] + "OK  "
-                       #return green(fbnode['pcu'])
                elif "NetDown" == rb  or "Not_Run" == rb:
                        return fbnode['pcu'] + "DOWN"
                elif "NetDown" == rb  or "Not_Run" == rb:
                        return fbnode['pcu'] + "DOWN"
-                       #return yellow(fbnode['pcu'])
                else:
                        return fbnode['pcu'] + "BAD "
                else:
                        return fbnode['pcu'] + "BAD "
-                       #return red(fbnode['pcu'])
        else:
        else:
-               #return red(fbnode['pcu'])
                return fbnode['pcu'] + "BAD "
 
 def color_boot_state(l):
        if    l == "dbg": return yellow("debg")
        elif  l == "dbg ": return yellow("debg")
                return fbnode['pcu'] + "BAD "
 
 def color_boot_state(l):
        if    l == "dbg": return yellow("debg")
        elif  l == "dbg ": return yellow("debg")
+       elif  l == "failboot": return yellow("debg")
        elif  l == "diag": return lightblue(l)
        elif  l == "diag": return lightblue(l)
+       elif  l == "diagnose": return lightblue(l)
+       elif  l == "safeboot": return lightblue(l)
        elif  l == "disable": return red("dsbl")
        elif  l == "disable": return red("dsbl")
+       elif  l == "disabled": return red("dsbl")
        elif  l == "down": return red(l)
        elif  l == "boot": return green(l)
        elif  l == "rins": return blue(l)
        elif  l == "down": return red(l)
        elif  l == "boot": return green(l)
        elif  l == "rins": return blue(l)
+       elif  l == "reinstall": return blue(l)
        else:
                return l
 
        else:
                return l
 
@@ -86,6 +86,8 @@ def diff_time(timestamp, abstime=True):
        now = time.time()
        if timestamp == None:
                return "unknown"
        now = time.time()
        if timestamp == None:
                return "unknown"
+       if type(timestamp) == type(datetime.now()):
+               timestamp = time.mktime(timestamp.timetuple())
        if abstime:
                diff = now - timestamp
        else:
        if abstime:
                diff = now - timestamp
        else:
@@ -154,7 +156,7 @@ def nodegroup_display(node, fbdata, conf=None):
                node['pcu'] = "PCU"
        node['lastupdate'] = diff_time(node['last_contact'])
 
                node['pcu'] = "PCU"
        node['lastupdate'] = diff_time(node['last_contact'])
 
-       pf = PersistFlags(node['hostname'], 1, db='node_persistflags')
+       pf = HistoryNodeRecord.get_by(hostname=node['hostname'])
        try:
                node['lc'] = diff_time(pf.last_changed)
        except:
        try:
                node['lc'] = diff_time(pf.last_changed)
        except:
@@ -185,6 +187,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
 
@@ -211,4 +214,54 @@ def get_nodeset(config):
                l_nodes = node_select(config.nodeselect, node_list, None)
 
        return l_nodes
                l_nodes = node_select(config.nodeselect, node_list, None)
 
        return l_nodes
+
+def email_exception(content=None):
+    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])
+    return
+
+def changed_lessthan(last_changed, days):
+       if datetime.now() - last_changed <= timedelta(days):
+               #print "last changed less than %s" % timedelta(days)
+               return True
+       else:
+               #print "last changed more than %s" % timedelta(days)
+               return False
+
+def changed_greaterthan(last_changed, days):
+       if datetime.now() - last_changed > timedelta(days):
+               #print "last changed more than %s" % timedelta(days)
+               return True
+       else:
+               #print "last changed less than %s" % timedelta(days)
+               return False
+
+def found_between(recent_actions, action_type, lower, upper):
+       return found_before(recent_actions, action_type, upper) and found_within(recent_actions, action_type, lower)
+
+def found_before(recent_actions, action_type, within):
+       for action in recent_actions:
+               if action_type == action.action_type and \
+                               action.date_created < (datetime.now() - timedelta(within)):
+                       return True
+       return False
+       
+def found_within(recent_actions, action_type, within):
+       for action in recent_actions:
+               #print "%s - %s %s > %s - %s (%s) ==> %s" % (action.loginbase, action.action_type, action.date_created, datetime.now(), timedelta(within), datetime.now()-timedelta(within), action.date_created > (datetime.now() - timedelta(within)) )
+               if action_type == action.action_type and \
+                               action.date_created > (datetime.now() - timedelta(within)):
+                               #datetime.now() - action.date_created < timedelta(within):
+                       # recent action of given type.
+                       #print "%s found_within %s in recent_actions from %s" % (action_type, timedelta(within), action.date_created)
+                       return True
+
+       print "%s NOT found_within %s in recent_actions" % (action_type, timedelta(within) )
+       return False