7 from datetime import datetime,timedelta
9 from nodequery import verify,query_to_dict,node_select
12 from nodecommon import *
14 from monitor import config
15 from monitor.wrapper import plc
16 from monitor.const import MINUP
17 from monitor.database import FindbadNodeRecord, HistoryNodeRecord
19 from unified_model import *
21 api = plc.getAuthAPI()
28 l_nodes = syncplcdb.create_plcdb()
29 l_plcnodes = database.dbLoad("l_plcnodes")
30 l_nodes = get_nodeset(config)
32 checkAndRecordState(l_nodes, l_plcnodes)
34 def checkAndRecordState(l_nodes, l_plcnodes):
37 for nodename in l_nodes:
39 for node in l_plcnodes:
40 if node['hostname'] == nodename:
46 pf = HistoryNodeRecord.findby_or_create(hostname=nodename)
47 pf.last_checked = datetime.now()
50 # Find the most recent record
51 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==nodename).order_by(FindbadNodeRecord.date_checked.desc()).first()
52 print "NODEREC: ", noderec.date_checked
54 print "COULD NOT FIND %s" % nodename
56 print traceback.print_exc()
59 node_state = noderec.observed_status
60 if noderec.plc_node_stats:
61 boot_state = noderec.plc_node_stats['boot_state']
63 boot_state = "unknown"
65 if node_state == "BOOT":
66 if pf.status != "good":
67 pf.last_changed = datetime.now()
69 elif node_state == "DEBUG":
70 if pf.status != boot_state:
71 pf.last_changed = datetime.now()
72 pf.status = boot_state
74 if pf.status != "down":
75 pf.last_changed = datetime.now()
79 print "%d %35s %s since(%s)" % (count, nodename, pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
81 # NOTE: this commits all pending operations to the DB. Do not remove, or
82 # replace with another operations that also commits all pending ops, such
83 # as session.commit() or flush() or something
84 print HistoryNodeRecord.query.count()
88 if __name__ == '__main__':
89 from monitor import parser as parsermodule
90 parser = parsermodule.getParser(['nodesets'])
91 parser.set_defaults(filename=None, node=None, nodeselect=False, nodegroup=None, cachenodes=False)
92 parser = parsermodule.getParser(['defaults'], parser)
93 config = parsermodule.parse_args(parser)
97 except Exception, err:
99 print traceback.print_exc()
100 print "Exception: %s" % err