merge from improvements on the 1.0 branch:
[monitor.git] / sitebad.py
index 750572a..f8524f0 100755 (executable)
@@ -4,54 +4,69 @@ 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():
+       main2(config)
 
-def main(config):
+def main2(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]
+       elif config.sitelist:
+               site_list = config.sitelist.split(',')
+               l_sites = site_list
        else:
                l_sites = [site['login_base'] for site in l_plcsites]
        
        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 +77,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 +97,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, 
@@ -95,13 +113,13 @@ if __name__ == '__main__':
 
        parser.add_option("", "--site", dest="site", metavar="login_base", 
                                                help="Provide a single site to operate on")
-       parser.add_option("", "--sitelist", dest="sitelist", metavar="file.list", 
-                                               help="Provide a list of files to operate on")
+       parser.add_option("", "--sitelist", dest="sitelist", 
+                                               help="Provide a list of sites separated by ','")
 
        config = parsermodule.parse_args(parser)
 
        try:
-               main(config)
+               main2(config)
        except Exception, err:
                import traceback
                print traceback.print_exc()