message_status = Field(String, default=None)
message_queue = Field(String, default=None)
message_created = Field(DateTime, default=None)
+ #message_last_reply = Field(DateTime, default=None)
penalty_level = Field(Int, default=0)
penalty_applied = Field(Boolean, default=False)
- acts_as_versioned(ignore=['last_changed', 'last_checked', 'message_status'])
+ penalty_pause = Field(Boolean, default=False)
+ penalty_pause_time = Field(DateTime, default=None)
+
+ acts_as_versioned(ignore=['last_changed', 'last_checked', 'message_status', 'penalty_pause_time'])
@classmethod
def by_loginbase(cls, loginbase):
return
- def pausePenalty(self):
+ def setPenaltyPause(self):
+ self.db.penalty_pause = True
+ self.db.penalty_pause_time = datetime.now()
act = ActionRecord(loginbase=self.db.loginbase,
action='penalty',
action_type='pause_penalty',)
#act = ActionRecord(loginbase=self.db.loginbase, action='penalty', action_type='clear_penalty',)
self.db.penalty_level = 0
self.db.penalty_applied = False
+ self.clearPenaltyPause()
+
+ def clearPenaltyPause(self):
+ self.db.penalty_pause = False
+ self.db.penalty_pause_time = None
def getTicketStatus(self):
if self.db.message_id != 0:
self.db.message_status = rtstatus['Status']
self.db.message_queue = rtstatus['Queue']
self.db.message_created = datetime.fromtimestamp(rtstatus['Created'])
+ #self.db.message_last_reply = datetime.fromtimestamp(rtstatus['Told'])
def setTicketStatus(self, status):
print 'SETTING status %s' % status
if ticket_id == None or ticket_id == "":
return {}
- cmd = "rt show -t ticket -f id,subject,status,queue,created %s" % (ticket_id)
+ cmd = "rt show -t ticket -f id,subject,status,queue,created,told %s" % (ticket_id)
print cmd
(f_in, f_out, f_err) = os.popen3(cmd)
value = f_out.read()
r_values[key] = r_values[key].strip()
r_values['Created'] = calendar.timegm(time.strptime(r_values['Created']))
+ r_values['Told'] = calendar.timegm(time.strptime(r_values['Told']))
return r_values
def setAdminCCViaRT(ticket_id, to):
print "%s %s %s" % (i, sitehist.db.loginbase, sitehist.db.status)
- # determine if there are penalties within the last 30 days?
- # if so, add a 'pause_penalty' action.
- if sitehist.db.message_id != 0 and sitehist.db.message_status == 'open' and \
- sitehist.db.penalty_level > 0 and not found_within(recent_actions, 'pause_penalty', 30):
- # pause escalation
- print "Pausing penalties for %s" % site
- sitehist.pausePenalty()
- else:
-
- if sitehist.db.status == 'down':
- if not found_within(recent_actions, 'pause_penalty', 30) and \
- not found_within(recent_actions, 'increase_penalty', 7) and \
- changed_greaterthan(sitehist.db.last_changed, 7):
-
- # TODO: catch errors
- sitehist.increasePenalty()
- sitehist.applyPenalty()
- sitehist.sendMessage('increase_penalty')
-
- print "send message for site %s penalty increase" % site
-
- if sitehist.db.status == 'good':
- # clear penalty
- # NOTE: because 'all clear' should have an indefinite status, we
- # have a boolean value rather than a 'recent action'
- if sitehist.db.penalty_applied:
- # send message that penalties are cleared.
-
- sitehist.clearPenalty()
- sitehist.applyPenalty()
- sitehist.sendMessage('clear_penalty')
- sitehist.closeTicket()
-
- print "send message for site %s penalty cleared" % site
+ if sitehist.db.status == 'down':
+ if sitehist.db.penalty_pause and \
+ changed_greaterthan(sitehist.db.penalty_pause_time, 30):
+
+ email_exception("", "clear pause penalty for site: %s" % sitehist.db.loginbase)
+ sitehist.closeTicket()
+ # NOTE: but preserve the penalty status.
+ sitehist.clearPenaltyPause()
+
+ if sitehist.db.message_id != 0 and \
+ sitehist.db.message_status == 'open' and \
+ not sitehist.db.penalty_pause:
+
+ email_exception("", "pause penalty for site: %s" % sitehist.db.loginbase)
+ sitehist.setPenaltyPause()
+
+ if not sitehist.db.penalty_pause and \
+ not found_within(recent_actions, 'increase_penalty', 7) and \
+ changed_greaterthan(sitehist.db.last_changed, 7):
+
+ # TODO: catch errors
+ sitehist.increasePenalty()
+ sitehist.applyPenalty()
+ sitehist.sendMessage('increase_penalty')
+
+ print "send message for site %s penalty increase" % site
+
+ if sitehist.db.status == 'good':
+ # clear penalty
+ # NOTE: because 'all clear' should have an indefinite status, we
+ # have a boolean value rather than a 'recent action'
+ if sitehist.db.penalty_applied or sitehist.db.penalty_pause:
+ # send message that penalties are cleared.
+
+ sitehist.clearPenalty()
+ sitehist.applyPenalty()
+ sitehist.sendMessage('clear_penalty')
+ sitehist.closeTicket()
+
+ print "send message for site %s penalty cleared" % site
site_count = site_count + 1