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 monitor.common import *
18 from nodequery import verify,query_to_dict,node_select
19 from monitor.model import *
21 api = plc.getAuthAPI()
27 l_nodes = plccache.l_nodes
28 l_plcsites = plccache.l_sites
31 l_sites = [config.site]
33 site_list = config.sitelist.split(',')
36 l_sites = [site['login_base'] for site in l_plcsites]
38 checkAndRecordState(l_sites, l_plcsites)
40 def getnewsite(nodelist):
44 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
45 if noderec is not None and \
46 noderec.plc_node_stats['last_contact'] != None:
50 print traceback.print_exc()
53 def getnodesup(nodelist):
57 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
58 #noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'],
59 # orderBy='date_checked').reversed()[0]
60 if noderec is not None and noderec.observed_status == "BOOT":
64 print traceback.print_exc()
67 def checkAndRecordState(l_sites, l_plcsites):
69 lb2hn = plccache.plcdb_lb2hn
70 for sitename in l_sites:
72 for site in l_plcsites:
73 if site['login_base'] == sitename:
80 pf = HistorySiteRecord.findby_or_create(loginbase=sitename)
82 pf.last_checked = datetime.now()
83 pf.slices_total = d_site['max_slices']
84 pf.slices_used = len(d_site['slice_ids'])
85 pf.nodes_total = len(lb2hn[sitename])
86 pf.nodes_up = getnodesup(lb2hn[sitename])
87 pf.new = getnewsite(lb2hn[sitename])
88 pf.enabled = d_site['enabled']
90 if pf.nodes_up >= MINUP:
91 if pf.status != "good": pf.last_changed = datetime.now()
94 if pf.status != "down": pf.last_changed = datetime.now()
98 print "%d %15s slices(%2s) nodes(%2s) up(%2s) %s" % (count, sitename, pf.slices_used,
99 pf.nodes_total, pf.nodes_up, pf.status)
102 print HistorySiteRecord.query.count()
107 if __name__ == '__main__':
108 from monitor import parser as parsermodule
110 parser = parsermodule.getParser()
111 parser.set_defaults(filename=None, node=None, site=None,
112 nodeselect=False, nodegroup=None, cachenodes=False)
114 parser.add_option("", "--site", dest="site", metavar="login_base",
115 help="Provide a single site to operate on")
116 parser.add_option("", "--sitelist", dest="sitelist",
117 help="Provide a list of sites separated by ','")
119 config = parsermodule.parse_args(parser)
123 except Exception, err:
125 print traceback.print_exc()
126 print "Exception: %s" % err