from monitor import database
import plc
-api = plc.getAuthAPI()
-
import mailer
import time
def gethostlist(hostlist_file):
return util.file.getListFromFile(hostlist_file)
-
- #nodes = api.GetNodes({'peer_id' : None}, ['hostname'])
- #return [ n['hostname'] for n in nodes ]
def array_to_priority_map(array):
""" Create a mapping where each entry of array is given a priority equal
raise Exception("No index %s or %s in map" % (v1, v2))
def cmpCategoryVal(v1, v2):
- map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ])
+ # Terrible hack to manage migration to no more 'ALPHA' states.
+ if v1 == 'ALPHA': v1 = "PROD"
+ if v2 == 'ALPHA': v2 = "PROD"
+ #map = array_to_priority_map([ None, 'PROD', 'ALPHA', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ])
+ map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDPROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ])
return cmpValMap(v1,v2,map)
#print "creating new object"
obj = super(PersistMessage, typ).__new__(typ, [id, subject, message, via_rt], **kwargs)
obj.id = id
- obj.actiontracker = Recent(3*60*60*24)
+ obj.actiontracker = Recent(1*60*60*24)
obj.ticket_id = None
if 'ticket_id' in kwargs and kwargs['ticket_id'] is not None:
self.save()
else:
# NOTE: only send a new message every week, regardless.
+ # NOTE: can cause thank-you messages to be lost, for instance when node comes back online within window.
print "Not sending to host b/c not within window of %s days" % (self.actiontracker.withintime // (60*60*24))
class MonitorMessage(object):
#print pm
if id in pm:
- print "Using existing object"
+ print "PersistSitePenalty Using existing object"
obj = pm[id]
else:
print "creating new object"
def severity(self):
category = self.data['category']
prev_category = self.data['prev_category']
- #print "SEVERITY: ", category, prev_category
+ print "SEVERITY: ", category, prev_category
+ try:
+ print "SEVERITY state: ", self.data['state'], self.data['prev_state']
+ except:
+ print "SEVERITY state: unknown unknown"
val = cmpCategoryVal(category, prev_category)
return val
def getDaysDown(cls, diag_record):
daysdown = -1
- if diag_record['comonstats']['uptime'] != "null":
+ if diag_record['comonstats']['uptime'] != "null" and diag_record['comonstats']['uptime'] != "-1":
daysdown = - int(float(diag_record['comonstats']['uptime'])) // (60*60*24)
#elif diag_record['comonstats']['sshstatus'] != "null":
# daysdown = int(diag_record['comonstats']['sshstatus']) // (60*60*24)
# return "%d days up"% -daysdown
#getStrDaysDown = classmethod(getStrDaysDown)
- def takeAction(self):
+ def takeAction(self, index=0):
pp = PersistSitePenalty(self.hostname, 0, db='persistpenalty_hostnames')
if 'improvement' in self.data['stage'] or self.improved() or \
'monitor-end-record' in self.data['stage']:
else:
print "takeAction: increasing penalty for %s"%self.hostname
pp.increase()
+ print "takeAction: applying penalty to %s as index %s"% (self.hostname, index)
+ pp.index = index
pp.apply(self.hostname)
pp.save()
self.data['message'][1] % self.data['args'],
True, db='monitor_persistmessages',
ticket_id=ticket_id)
+ if self.data['stage'] == "improvement":
+ message.reset()
return message
else:
return None
if ADMIN & roles:
contacts += [config.email]
if TECH & roles:
- contacts += [TECHEMAIL % self.loginbase]
+ #contacts += [TECHEMAIL % self.loginbase]
+ contacts += plc.getTechEmails(self.loginbase)
if PI & roles:
- contacts += [PIEMAIL % self.loginbase]
+ #contacts += [PIEMAIL % self.loginbase]
+ contacts += plc.getPIEmails(self.loginbase)
if USER & roles:
+ contacts += plc.getSliceUserEmails(self.loginbase)
slices = plc.slices(self.loginbase)
if len(slices) >= 1:
- for slice in slices:
- contacts += [SLICEMAIL % slice]
+ #for slice in slices:
+ # contacts += [SLICEMAIL % slice]
print "SLIC: %20s : %d slices" % (self.loginbase, len(slices))
else:
print "SLIC: %20s : 0 slices" % self.loginbase