import time
import struct
-from pcucontrol import reboot
-
+from monitor import reboot
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"
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"
- #return yellow(fbnode['pcu'])
else:
return fbnode['pcu'] + "BAD "
- #return red(fbnode['pcu'])
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")
+ elif l == "failboot": return yellow("debg")
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 == "disabled": return red("dsbl")
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
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:
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:
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
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