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 import HistorySiteRecord, FindbadNodeRecord
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_nodes = plccache.l_nodes
26 l_plcsites = plccache.l_sites
29 l_sites = [config.site]
31 l_sites = [site['login_base'] for site in l_plcsites]
33 checkAndRecordState(l_sites, l_plcsites)
35 def getnodesup(nodelist):
39 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
40 #noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'],
41 # orderBy='date_checked').reversed()[0]
42 if noderec is not None and noderec.observed_status == "BOOT":
46 print traceback.print_exc()
49 def checkAndRecordState(l_sites, l_plcsites):
51 lb2hn = plccache.plcdb_lb2hn
52 for sitename in l_sites:
54 for site in l_plcsites:
55 if site['login_base'] == sitename:
62 pf = HistorySiteRecord.findby_or_create(loginbase=sitename)
64 pf.last_checked = datetime.now()
65 pf.slices_used = len(d_site['slice_ids'])
66 pf.nodes_total = len(lb2hn[sitename])
67 pf.nodes_up = getnodesup(lb2hn[sitename])
69 if pf.nodes_up >= MINUP:
70 if pf.status != "good": pf.last_changed = datetime.now()
73 if pf.status != "down": pf.last_changed = datetime.now()
77 print "%d %15s slices(%2s) nodes(%2s) up(%2s) %s" % (count, sitename, pf.slices_used,
78 pf.nodes_total, pf.nodes_up, pf.status)
79 print HistorySiteRecord.query.count()
83 if __name__ == '__main__':
84 from monitor import parser as parsermodule
86 parser = parsermodule.getParser()
87 parser.set_defaults(filename=None, node=None, site=None,
88 nodeselect=False, nodegroup=None, cachenodes=False)
90 parser.add_option("", "--site", dest="site", metavar="login_base",
91 help="Provide a single site to operate on")
92 parser.add_option("", "--sitelist", dest="sitelist", metavar="file.list",
93 help="Provide a list of files to operate on")
95 config = parsermodule.parse_args(parser)
99 except Exception, err:
101 print traceback.print_exc()
102 print "Exception: %s" % err