7 from datetime import datetime,timedelta
9 from monitor import database
10 from monitor import parser as parsermodule
11 from monitor import config
12 from monitor.database.info.model import HistorySiteRecord, FindbadNodeRecord, session
13 from monitor.wrapper import plc, plccache
14 from monitor.const import MINUP
16 from monitor.common import *
17 from nodequery import verify,query_to_dict,node_select
18 from monitor.model import *
20 api = plc.getAuthAPI()
26 l_nodes = plccache.l_nodes
27 l_plcsites = plccache.l_sites
30 l_sites = [config.site]
32 site_list = config.sitelist.split(',')
35 l_sites = [site['login_base'] for site in l_plcsites]
37 checkAndRecordState(l_sites, l_plcsites)
39 def getnewsite(nodelist):
43 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
44 if noderec is not None and \
45 noderec.plc_node_stats['last_contact'] != None:
49 print traceback.print_exc()
52 def getnodesup(nodelist):
56 noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first()
57 #noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'],
58 # orderBy='date_checked').reversed()[0]
59 if noderec is not None and noderec.observed_status == "BOOT":
63 print traceback.print_exc()
66 def checkAndRecordState(l_sites, l_plcsites):
68 lb2hn = plccache.plcdb_lb2hn
69 for sitename in l_sites:
71 for site in l_plcsites:
72 if site['login_base'] == sitename:
79 pf = HistorySiteRecord.findby_or_create(loginbase=sitename)
81 pf.last_checked = datetime.now()
82 pf.slices_total = d_site['max_slices']
83 pf.slices_used = len(d_site['slice_ids'])
84 pf.nodes_total = len(lb2hn[sitename])
85 pf.nodes_up = getnodesup(lb2hn[sitename])
86 pf.new = getnewsite(lb2hn[sitename])
87 pf.enabled = d_site['enabled']
89 if pf.nodes_up >= MINUP:
90 if pf.status != "good": pf.last_changed = datetime.now()
93 if pf.status != "down": pf.last_changed = datetime.now()
97 print "%d %15s slices(%2s) nodes(%2s) up(%2s) %s" % (count, sitename, pf.slices_used,
98 pf.nodes_total, pf.nodes_up, pf.status)
101 print HistorySiteRecord.query.count()
106 if __name__ == '__main__':
107 from monitor import parser as parsermodule
109 parser = parsermodule.getParser()
110 parser.set_defaults(filename=None, node=None, site=None,
111 nodeselect=False, nodegroup=None, cachenodes=False)
113 parser.add_option("", "--site", dest="site", metavar="login_base",
114 help="Provide a single site to operate on")
115 parser.add_option("", "--sitelist", dest="sitelist",
116 help="Provide a list of sites separated by ','")
118 config = parsermodule.parse_args(parser)
122 except Exception, err:
124 print traceback.print_exc()
125 print "Exception: %s" % err