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 HistorySiteRecord, FindbadNodeRecord, session
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 getnewsite(nodelist):
39 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
40 if noderec is not None and \
41 noderec.plc_node_stats['last_contact'] != None:
45 print traceback.print_exc()
48 def getnodesup(nodelist):
52 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
53 #noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'],
54 # orderBy='date_checked').reversed()[0]
55 if noderec is not None and noderec.observed_status == "BOOT":
59 print traceback.print_exc()
62 def checkAndRecordState(l_sites, l_plcsites):
64 lb2hn = plccache.plcdb_lb2hn
65 for sitename in l_sites:
67 for site in l_plcsites:
68 if site['login_base'] == sitename:
75 pf = HistorySiteRecord.findby_or_create(loginbase=sitename)
77 pf.last_checked = datetime.now()
78 pf.slices_total = d_site['max_slices']
79 pf.slices_used = len(d_site['slice_ids'])
80 pf.nodes_total = len(lb2hn[sitename])
81 pf.nodes_up = getnodesup(lb2hn[sitename])
82 pf.new = getnewsite(lb2hn[sitename])
83 pf.enabled = d_site['enabled']
85 if pf.nodes_up >= MINUP:
86 if pf.status != "good": pf.last_changed = datetime.now()
89 if pf.status != "down": pf.last_changed = datetime.now()
93 print "%d %15s slices(%2s) nodes(%2s) up(%2s) %s" % (count, sitename, pf.slices_used,
94 pf.nodes_total, pf.nodes_up, pf.status)
97 print HistorySiteRecord.query.count()
102 if __name__ == '__main__':
103 from monitor import parser as parsermodule
105 parser = parsermodule.getParser()
106 parser.set_defaults(filename=None, node=None, site=None,
107 nodeselect=False, nodegroup=None, cachenodes=False)
109 parser.add_option("", "--site", dest="site", metavar="login_base",
110 help="Provide a single site to operate on")
111 parser.add_option("", "--sitelist", dest="sitelist", metavar="file.list",
112 help="Provide a list of files to operate on")
114 config = parsermodule.parse_args(parser)
118 except Exception, err:
120 print traceback.print_exc()
121 print "Exception: %s" % err