X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=monitor_policy.py;h=5db440f6824bef780f49f017df14ac19cb62744a;hb=refs%2Fheads%2F1.0;hp=70eee049f0f4420ab4b7889f7e6e568882307903;hpb=77f84f1e8242cdc45eb091ab65eef940a23493a6;p=monitor.git diff --git a/monitor_policy.py b/monitor_policy.py index 70eee04..5db440f 100644 --- a/monitor_policy.py +++ b/monitor_policy.py @@ -1,18 +1,25 @@ -from config import config -#print "policy" -config = config() -import soltesz +import config +import database import time import mailer -from www.printbadnodes import cmpCategoryVal +from unified_model import cmpCategoryVal import sys import emailTxt import string -from policy import get_ticket_id, print_stats, close_rt_backoff, reboot_node from rt import is_host_in_rt_tickets import plc +def get_ticket_id(record): + if 'ticket_id' in record and record['ticket_id'] is not "" and record['ticket_id'] is not None: + return record['ticket_id'] + elif 'found_rt_ticket' in record and \ + record['found_rt_ticket'] is not "" and \ + record['found_rt_ticket'] is not None: + return record['found_rt_ticket'] + else: + return None + # Time to enforce policy POLSLEEP = 7200 @@ -49,13 +56,13 @@ class Merge: self.merge_list = l_merge # the hostname to loginbase mapping - self.plcdb_hn2lb = soltesz.dbLoad("plcdb_hn2lb") + self.plcdb_hn2lb = database.dbLoad("plcdb_hn2lb") # Previous actions taken on nodes. - self.act_all = soltesz.if_cached_else(1, "act_all", lambda : {}) - self.findbad = soltesz.if_cached_else(1, "findbad", lambda : {}) + self.act_all = database.if_cached_else(1, "act_all", lambda : {}) + self.findbad = database.if_cached_else(1, "findbad", lambda : {}) - self.cache_all = soltesz.if_cached_else(1, "act_all", lambda : {}) + self.cache_all = database.if_cached_else(1, "act_all", lambda : {}) self.sickdb = {} self.mergedb = {} @@ -257,8 +264,8 @@ class RT: class Diagnose: def __init__(self, record_list): self.record_list = record_list - self.plcdb_hn2lb = soltesz.dbLoad("plcdb_hn2lb") - self.findbad = soltesz.if_cached_else(1, "findbad", lambda : {}) + self.plcdb_hn2lb = database.dbLoad("plcdb_hn2lb") + self.findbad = database.if_cached_else(1, "findbad", lambda : {}) self.diagnose_in = {} self.diagnose_out = {} @@ -274,6 +281,8 @@ class Diagnose: print "----------------" import traceback print traceback.print_exc() + from nodecommon import email_exception + email_exception() print err #if config.policysavedb: sys.exit(1) @@ -398,7 +407,7 @@ class Diagnose: # NOTE: these settings can be overridden by command line arguments, # or the state of a record, i.e. if already in RT's Support Queue. - pf = PersistFlags(loginbase, 1, db='site_persitflags') + pf = PersistFlags(loginbase, 1, db='site_persistflags') nodes_up = pf.nodes_up if nodes_up < MINUP: d_diag_site[loginbase]['config']['squeeze'] = True @@ -823,16 +832,27 @@ class Diagnose: return up +def close_rt_backoff(args): + if 'ticket_id' in args and (args['ticket_id'] != "" and args['ticket_id'] != None): + mailer.closeTicketViaRT(args['ticket_id'], + "Ticket CLOSED automatically by SiteAssist.") + plc.enableSlices(args['hostname']) + plc.enableSliceCreation(args['hostname']) + return + +def reboot_node(args): + host = args['hostname'] + return reboot.reboot_policy(host, True, config.debug) class Action: def __init__(self, diagnose_out): # the hostname to loginbase mapping - self.plcdb_hn2lb = soltesz.dbLoad("plcdb_hn2lb") + self.plcdb_hn2lb = database.dbLoad("plcdb_hn2lb") # Actions to take. self.diagnose_db = diagnose_out # Actions taken. - self.act_all = soltesz.if_cached_else(1, "act_all", lambda : {}) + self.act_all = database.if_cached_else(1, "act_all", lambda : {}) # A dict of actions to specific functions. PICKLE doesnt' like lambdas. self.actions = {} @@ -866,27 +886,29 @@ class Action: print "----------------" import traceback print traceback.print_exc() + from nodecommon import email_exception + email_exception() print err if config.policysavedb: print "Saving Databases... act_all" - soltesz.dbDump("act_all", self.act_all) - soltesz.dbDump("diagnose_out", self.diagnose_db) + database.dbDump("act_all", self.act_all) + database.dbDump("diagnose_out", self.diagnose_db) sys.exit(1) #print_stats("sites_observed", stats) #print_stats("sites_diagnosed", stats) #print_stats("nodes_diagnosed", stats) - print_stats("sites_emailed", stats) + self.print_stats("sites_emailed", stats) #print_stats("nodes_actedon", stats) print string.join(stats['allsites'], ",") if config.policysavedb: print "Saving Databases... act_all" - #soltesz.dbDump("policy.eventlog", self.eventlog) + #database.dbDump("policy.eventlog", self.eventlog) # TODO: remove 'diagnose_out', # or at least the entries that were acted on. - soltesz.dbDump("act_all", self.act_all) - soltesz.dbDump("diagnose_out", self.diagnose_db) + database.dbDump("act_all", self.act_all) + database.dbDump("diagnose_out", self.diagnose_db) def accumSites(self): """ @@ -919,18 +941,22 @@ class Action: if ADMIN & roles: contacts += [config.email] if TECH & roles: - contacts += [TECHEMAIL % loginbase] + #contacts += [TECHEMAIL % loginbase] + contacts += plc.getTechEmails(loginbase) if PI & roles: - contacts += [PIEMAIL % loginbase] + #contacts += [PIEMAIL % loginbase] + contacts += plc.getPIEmails(loginbase) if USER & roles: + contacts += plc.getSliceUserEmails(loginbase) slices = plc.slices(loginbase) if len(slices) >= 1: - for slice in slices: - contacts += [SLICEMAIL % slice] print "SLIC: %20s : %d slices" % (loginbase, len(slices)) else: print "SLIC: %20s : 0 slices" % loginbase + unique_contacts = set(contacts) + contacts = [ c for c in unique_contacts ] # convert back into list + try: subject = message[0] % args body = message[1] % args @@ -948,6 +974,8 @@ class Action: print "exception on message:" import traceback print traceback.print_exc() + from nodecommon import email_exception + email_exception() print message return ticket_id @@ -1091,10 +1119,10 @@ class Action: if config.policysavedb: #print "Saving Databases... act_all, diagnose_out" - #soltesz.dbDump("act_all", self.act_all) + #database.dbDump("act_all", self.act_all) # remove site record from diagnose_out, it's in act_all as done. del self.diagnose_db[loginbase] - #soltesz.dbDump("diagnose_out", self.diagnose_db) + #database.dbDump("diagnose_out", self.diagnose_db) print "sleeping for 1 sec" time.sleep(1)