7 from datetime import datetime,timedelta
9 from nodequery import verify,query_to_dict,node_select
11 from nodecommon import *
13 from monitor import config
14 from monitor.wrapper import plc,plccache
15 from monitor.const import MINUP
16 from monitor.database import FindbadNodeRecord, HistoryNodeRecord
18 from unified_model import *
20 api = plc.getAuthAPI()
27 l_plcnodes = plccache.l_nodes
28 l_nodes = get_nodeset(config)
30 checkAndRecordState(l_nodes, l_plcnodes)
32 def checkAndRecordState(l_nodes, l_plcnodes):
35 for nodename in l_nodes:
37 for node in l_plcnodes:
38 if node['hostname'] == nodename:
44 pf = HistoryNodeRecord.findby_or_create(hostname=nodename)
45 pf.last_checked = datetime.now()
48 # Find the most recent record
49 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==nodename).order_by(FindbadNodeRecord.date_checked.desc()).first()
50 #print "NODEREC: ", noderec.date_checked
52 print "COULD NOT FIND %s" % nodename
54 print traceback.print_exc()
57 node_state = noderec.observed_status
58 if noderec.plc_node_stats:
59 boot_state = noderec.plc_node_stats['boot_state']
61 boot_state = "unknown"
63 if node_state == "BOOT":
64 if pf.status != "good":
65 pf.last_changed = datetime.now()
67 elif node_state == "DEBUG":
68 if pf.status != boot_state:
69 pf.last_changed = datetime.now()
70 pf.status = boot_state
72 if pf.status != "down":
73 pf.last_changed = datetime.now()
77 print "%d %35s %s since(%s)" % (count, nodename, pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
79 # NOTE: this commits all pending operations to the DB. Do not remove, or
80 # replace with another operations that also commits all pending ops, such
81 # as session.commit() or flush() or something
82 print HistoryNodeRecord.query.count()
86 if __name__ == '__main__':
87 from monitor import parser as parsermodule
88 parser = parsermodule.getParser(['nodesets'])
89 parser.set_defaults(filename=None, node=None, nodeselect=False, nodegroup=None, cachenodes=False)
90 parser = parsermodule.getParser(['defaults'], parser)
91 config = parsermodule.parse_args(parser)
95 except Exception, err:
97 print traceback.print_exc()
98 print "Exception: %s" % err