13 from nodequery import verify,query_to_dict,node_select
14 from nodecommon import *
15 from datetime import datetime,timedelta
18 from sqlobject import connectionForURI,sqlhub
19 connection = connectionForURI(config.sqlobjecturi)
20 sqlhub.processConnection = connection
21 from infovacuum.model_findbadrecord import *
22 from infovacuum.model_historyrecord import *
25 api = plc.getAuthAPI()
26 from unified_model import *
27 from const import MINUP
34 l_nodes = syncplcdb.create_plcdb()
35 l_plcnodes = database.dbLoad("l_plcnodes")
36 l_nodes = get_nodeset(config)
38 checkAndRecordState(l_nodes, l_plcnodes)
40 def checkAndRecordState(l_nodes, l_plcnodes):
43 for nodename in l_nodes:
45 for node in l_plcnodes:
46 if node['hostname'] == nodename:
53 pf = HistoryNodeRecord.by_hostname(nodename)
55 pf = HistoryNodeRecord(hostname=nodename)
57 pf.last_checked = datetime.now()
60 # Find the most recent record
61 noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==nodename,
62 orderBy='date_checked').reversed()[0]
64 # or create an empty one.
65 noderec = FindbadNodeRecord(hostname=nodename)
67 node_state = noderec.observed_status
68 if noderec.plc_node_stats:
69 boot_state = noderec.plc_node_stats['boot_state']
71 boot_state = "unknown"
73 if node_state == "BOOT":
74 if pf.status != "good":
75 pf.last_changed = datetime.now()
77 elif node_state == "DEBUG":
78 if pf.status != boot_state:
79 pf.last_changed = datetime.now()
80 pf.status = boot_state
82 if pf.status != "down":
83 pf.last_changed = datetime.now()
87 print "%d %35s %s since(%s)" % (count, nodename, pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
91 if __name__ == '__main__':
92 import parser as parsermodule
93 parser = parsermodule.getParser(['nodesets'])
94 parser.set_defaults(filename=None, node=None, nodeselect=False, nodegroup=None, cachenodes=False)
95 parser = parsermodule.getParser(['defaults'], parser)
96 config = parsermodule.parse_args(parser)
100 except Exception, err:
102 print traceback.print_exc()
103 print "Exception: %s" % err