X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sitebad.py;h=513223314b8bb1a71e25d6e6743d97d5bf5dd278;hb=ca65ff1cd55b2a285320ec8562e8ca1e29fbc4f0;hp=750572a2a938da4c225b5635b43679cc822362fc;hpb=b548c69db3d1f302b4d0d08377f0231eb3c4fd58;p=monitor.git diff --git a/sitebad.py b/sitebad.py index 750572a..5132233 100755 --- a/sitebad.py +++ b/sitebad.py @@ -4,31 +4,26 @@ import os import sys import string import time +from datetime import datetime,timedelta +from monitor import database +from pcucontrol import reboot +from monitor import parser as parsermodule +from monitor import config +from monitor.database.info.model import HistorySiteRecord, FindbadNodeRecord, session +from monitor.wrapper import plc, plccache +from monitor.const import MINUP -import database -import comon -import threadpool -import syncplcdb +from monitor.common import * from nodequery import verify,query_to_dict,node_select -from datetime import datetime,timedelta -import config - -from sqlobject import connectionForURI,sqlhub -connection = connectionForURI(config.sqlobjecturi) -sqlhub.processConnection = connection -from infovacuum.model.findbadrecord import * -from infovacuum.model.historyrecord import * +from monitor.model import * -import plc api = plc.getAuthAPI() -from unified_model import * -from const import MINUP def main(config): - l_nodes = syncplcdb.create_plcdb() - l_plcsites = database.dbLoad("l_plcsites") + l_nodes = plccache.l_nodes + l_plcsites = plccache.l_sites if config.site: l_sites = [config.site] @@ -37,21 +32,36 @@ def main(config): checkAndRecordState(l_sites, l_plcsites) +def getnewsite(nodelist): + new = True + for node in nodelist: + try: + noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first() + if noderec is not None and \ + noderec.plc_node_stats['last_contact'] != None: + new = False + except: + import traceback + print traceback.print_exc() + return new + def getnodesup(nodelist): up = 0 for node in nodelist: try: - noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'], - orderBy='date_checked').reversed()[0] - if noderec.observed_status == "BOOT": + noderec = FindbadNodeRecord.query.filter(FindbadNodeRecord.hostname==node['hostname']).order_by(FindbadNodeRecord.date_checked.desc()).first() + #noderec = FindbadNodeRecord.select(FindbadNodeRecord.q.hostname==node['hostname'], + # orderBy='date_checked').reversed()[0] + if noderec is not None and noderec.observed_status == "BOOT": up = up + 1 except: - pass + import traceback + print traceback.print_exc() return up def checkAndRecordState(l_sites, l_plcsites): count = 0 - lb2hn = database.dbLoad("plcdb_lb2hn") + lb2hn = plccache.plcdb_lb2hn for sitename in l_sites: d_site = None for site in l_plcsites: @@ -62,16 +72,15 @@ def checkAndRecordState(l_sites, l_plcsites): continue if sitename in lb2hn: - try: - pf = HistorySiteRecord.by_loginbase(sitename) - except: - pf = HistorySiteRecord(loginbase=sitename) + pf = HistorySiteRecord.findby_or_create(loginbase=sitename) pf.last_checked = datetime.now() - + pf.slices_total = d_site['max_slices'] pf.slices_used = len(d_site['slice_ids']) pf.nodes_total = len(lb2hn[sitename]) pf.nodes_up = getnodesup(lb2hn[sitename]) + pf.new = getnewsite(lb2hn[sitename]) + pf.enabled = d_site['enabled'] if pf.nodes_up >= MINUP: if pf.status != "good": pf.last_changed = datetime.now() @@ -83,11 +92,15 @@ def checkAndRecordState(l_sites, l_plcsites): count += 1 print "%d %15s slices(%2s) nodes(%2s) up(%2s) %s" % (count, sitename, pf.slices_used, pf.nodes_total, pf.nodes_up, pf.status) + pf.flush() + + print HistorySiteRecord.query.count() + session.flush() return True if __name__ == '__main__': - import parser as parsermodule + from monitor import parser as parsermodule parser = parsermodule.getParser() parser.set_defaults(filename=None, node=None, site=None,