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.info.model import FindbadNodeRecord, HistoryNodeRecord
17 from monitor.database.dborm import mon_session as session
19 from monitor.model import *
21 api = plc.getAuthAPI()
28 l_plcnodes = plccache.l_nodes
29 l_nodes = get_nodeset(config)
31 checkAndRecordState(l_nodes, l_plcnodes)
33 def checkAndRecordState(l_nodes, l_plcnodes):
36 for nodename in l_nodes:
38 for node in l_plcnodes:
39 if node['hostname'] == nodename:
45 pf = HistoryNodeRecord.findby_or_create(hostname=nodename)
46 pf.last_checked = datetime.now()
49 # Find the most recent record
50 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==nodename).order_by(FindbadNodeRecord.date_checked.desc()).first()
51 #print "NODEREC: ", noderec.date_checked
53 print "COULD NOT FIND %s" % nodename
55 print traceback.print_exc()
59 print "none object for %s"% nodename
62 node_state = noderec.observed_status
63 if noderec.plc_node_stats:
64 boot_state = noderec.plc_node_stats['boot_state']
66 boot_state = "unknown"
68 if node_state == "BOOT":
69 if pf.status != "good":
70 pf.last_changed = datetime.now()
72 elif node_state == "DEBUG":
73 if pf.status != boot_state:
74 pf.last_changed = datetime.now()
75 pf.status = boot_state
77 if pf.status != "down":
78 pf.last_changed = datetime.now()
82 print "%d %35s %s since(%s)" % (count, nodename, pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
84 # NOTE: this commits all pending operations to the DB. Do not remove, or
85 # replace with another operations that also commits all pending ops, such
86 # as session.commit() or flush() or something
87 print HistoryNodeRecord.query.count()
92 if __name__ == '__main__':
93 from monitor import parser as parsermodule
94 parser = parsermodule.getParser(['nodesets'])
95 parser.set_defaults(filename=None, node=None, nodeselect=False, nodegroup=None, cachenodes=False)
96 parser = parsermodule.getParser(['defaults'], parser)
97 config = parsermodule.parse_args(parser)
101 except Exception, err:
103 print traceback.print_exc()
104 print "Exception: %s" % err