8 from reboot import pcu_name
14 from nodequery import verify,query_to_dict,node_select
15 import parser as parsermodule
16 from nodecommon import *
17 from datetime import datetime,timedelta
20 from sqlobject import connectionForURI,sqlhub
21 connection = connectionForURI(config.sqlobjecturi)
22 sqlhub.processConnection = connection
23 from infovacuum.model_findbadrecord import *
24 from infovacuum.model_historyrecord import *
27 api = plc.getAuthAPI()
28 from unified_model import *
29 from const import MINUP
34 l_plcpcus = database.if_cached_else_refresh(1, 1, "pculist", lambda : plc.GetPCUs())
39 if ( pcu['hostname'] is not None and config.pcu in pcu['hostname'] ) or \
40 ( pcu['ip'] is not None and config.pcu in pcu['ip'] ):
41 l_pcus = [pcu['pcu_id']]
43 print "ERROR: could not find pcu %s" % config.pcu
46 l_pcus = [pcu['pcu_id'] for pcu in l_plcpcus]
48 checkAndRecordState(l_pcus, l_plcpcus)
50 hn2lb = database.dbLoad("plcdb_hn2lb")
52 def checkAndRecordState(l_pcus, l_plcpcus):
54 for pcuname in l_pcus:
58 if pcu['pcu_id'] == pcuname:
65 pf = HistoryPCURecord.by_pcuid(d_pcu['pcu_id'])
67 pf = HistoryPCURecord(plc_pcuid=pcuname)
69 pf.last_checked = datetime.now()
72 # Find the most recent record
73 pcurec = FindbadPCURecord.select(FindbadPCURecord.q.plc_pcuid==pcuname,
74 orderBy='date_checked').reversed()[0]
76 # don't have the info to create a new entry right now, so continue.
79 pcu_state = pcurec.reboot_trial_status
80 current_state = pcu_state
82 if current_state == 0 or current_state == "0":
83 if pf.status != "good":
84 pf.last_changed = datetime.now()
86 elif current_state == 'NetDown':
87 if pf.status != "netdown":
88 pf.last_changed = datetime.now()
90 elif current_state == 'Not_Run':
91 if pf.status != "badconfig":
92 pf.last_changed = datetime.now()
93 pf.status = "badconfig"
95 if pf.status != "error":
96 pf.last_changed = datetime.now()
100 print "%d %35s %s since(%s)" % (count, pcu_name(d_pcu), pf.status, diff_time(time.mktime(pf.last_changed.timetuple())))
104 if __name__ == '__main__':
105 parser = parsermodule.getParser()
106 parser.set_defaults(filename=None, pcu=None, pcuselect=False, pcugroup=None, cachepcus=False)
107 parser.add_option("", "--pcu", dest="pcu", metavar="hostname",
108 help="Provide a single pcu to operate on")
109 parser.add_option("", "--pculist", dest="pculist", metavar="file.list",
110 help="Provide a list of files to operate on")
112 config = parsermodule.parse_args(parser)
116 except Exception, err:
118 print traceback.print_exc()
119 print "Exception: %s" % err