7 from datetime import datetime,timedelta
9 from monitor import database
10 from pcucontrol import reboot
11 from monitor import parser as parsermodule
12 from monitor import config
13 from monitor.database.info.model import HistoryPCURecord, FindbadPCURecord
14 from monitor.wrapper import plc,plccache
15 from monitor.const import MINUP
17 from nodecommon import *
18 from nodequery import verify,query_to_dict,node_select
19 from monitor.model import *
21 api = plc.getAuthAPI()
25 l_plcpcus = plccache.l_pcus
30 if ( pcu['hostname'] is not None and config.pcu in pcu['hostname'] ) or \
31 ( pcu['ip'] is not None and config.pcu in pcu['ip'] ):
32 l_pcus = [pcu['pcu_id']]
34 print "ERROR: could not find pcu %s" % config.pcu
37 l_pcus = [pcu['pcu_id'] for pcu in l_plcpcus]
39 checkAndRecordState(l_pcus, l_plcpcus)
41 hn2lb = plccache.plcdb_hn2lb
43 def checkAndRecordState(l_pcus, l_plcpcus):
45 for pcuname in l_pcus:
49 if pcu['pcu_id'] == pcuname:
55 pf = HistoryPCURecord.findby_or_create(plc_pcuid=d_pcu['pcu_id'])
56 pf.last_checked = datetime.now()
59 # Find the most recent record
60 pcurec = FindbadPCURecord.query.filter(FindbadPCURecord.plc_pcuid==pcuname).order_by(FindbadPCURecord.date_checked.desc()).first()
61 print "NODEREC: ", pcurec.date_checked
63 print "COULD NOT FIND FB record for %s" % reboot.pcu_name(pcu)
65 print traceback.print_exc()
66 # don't have the info to create a new entry right now, so continue.
69 pcu_state = pcurec.reboot_trial_status
70 current_state = pcu_state
72 if current_state == 0 or current_state == "0":
73 if pf.status != "good":
74 pf.last_changed = datetime.now()
76 elif current_state == 'NetDown':
77 if pf.status != "netdown":
78 pf.last_changed = datetime.now()
80 elif current_state == 'Not_Run':
81 if pf.status != "badconfig":
82 pf.last_changed = datetime.now()
83 pf.status = "badconfig"
85 if pf.status != "error":
86 pf.last_changed = datetime.now()
90 print "%d %35s %s since(%s)" % (count, reboot.pcu_name(d_pcu), pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
92 # NOTE: this commits all pending operations to the DB. Do not remove, or
93 # replace with another operations that also commits all pending ops, such
94 # as session.commit() or flush() or something
95 print HistoryPCURecord.query.count()
99 if __name__ == '__main__':
100 parser = parsermodule.getParser()
101 parser.set_defaults(filename=None, pcu=None, pcuselect=False, pcugroup=None, cachepcus=False)
102 parser.add_option("", "--pcu", dest="pcu", metavar="hostname",
103 help="Provide a single pcu to operate on")
104 parser.add_option("", "--pculist", dest="pculist", metavar="file.list",
105 help="Provide a list of files to operate on")
107 config = parsermodule.parse_args(parser)
111 except Exception, err:
113 print traceback.print_exc()
114 print "Exception: %s" % err