X-Git-Url: http://git.onelab.eu/?p=monitor.git;a=blobdiff_plain;f=monitor%2Fcommon.py;h=ae32156c6653fa685515166f6a4d065ce451d95c;hp=9878d527bd4023838bfb6649647473a70a0f87ca;hb=HEAD;hpb=2c3be2b58bc07001f1b221135997f6a0d45477a6 diff --git a/monitor/common.py b/monitor/common.py index 9878d52..ae32156 100644 --- a/monitor/common.py +++ b/monitor/common.py @@ -3,8 +3,8 @@ import time 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 @@ -43,12 +43,17 @@ def get_current_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: + print fbnode.keys() 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. """ + from monitor.wrapper import plccache api = plc.getAuthAPI() l_nodes = plccache.l_nodes @@ -201,28 +207,37 @@ def get_nodeset(config): l_nodes = api.GetNodes(ng[0]['node_ids'], ['hostname']) elif config.site: site = api.GetSites(config.site) - l_nodes = api.GetNodes(site[0]['node_ids'], ['hostname']) + if len(site) > 0: + l_nodes = api.GetNodes(site[0]['node_ids'], ['hostname']) + else: + print "No site returned for : %s" % config.site + return [] l_nodes = [node['hostname'] for node in l_nodes] # 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 ] - l_nodes = node_select(config.nodeselect, node_list, None) + l_nodes = query.node_select(config.nodeselect, node_list, None) 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 - 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): @@ -234,6 +249,9 @@ def changed_lessthan(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 @@ -264,3 +282,14 @@ def found_within(recent_actions, action_type, within): 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