def updateState(self): now = datetime.now().strftime("%Y.%m.%d %H:%M:%S") status = self.workflow.currentStatus prev = self.workflow.previousStatus state = self.factory.state uid = self.factory.uid org = self.factory.cfg.check.org if org: state.set('org', org) state.set('previous status', prev) state.set('previous status name', cfg.getStateNameFromNumber(prev)) state.set('current status', status) state.set('node', utils.getHostFromURI(uid)) state.set('service', utils.getFriendlyTypeFromURI(uid)) try: state.set('desc', self.rules.msg) except AttributeError: # mo msg set pass statusName = cfg.getStateNameFromNumber(status) state.set('current status name', statusName) state.set('last check', now) if status in [states.ok, states.warn, states.error, states.failed]: count_index = 'count %s' % statusName state_index = 'last %s' % status state.set(state_index, now) if status == prev: state.set(count_index, state.get(count_index) + 1) else: state.set(count_index, 1)
def setNonChangingState(state, stateNum, uid): stateName = cfg.getStateNameFromNumber(stateNum) type = utils.getFriendlyTypeFromURI(uid) host = utils.getHostFromURI(uid) org = cfg.getCheckConfigFromURI(uid).org state.set('current status', stateNum) state.set('current status name', stateName) state.set('count '+stateName, 1) state.set('node', host) state.set('service', type) if org: state.set('org', org) return state
def setNonChangingState(state, stateNum, uid): stateName = cfg.getStateNameFromNumber(stateNum) type = utils.getFriendlyTypeFromURI(uid) host = utils.getHostFromURI(uid) org = cfg.getCheckConfigFromURI(uid).org state.set('current status', stateNum) state.set('current status name', stateName) state.set('count ' + stateName, 1) state.set('node', host) state.set('service', type) if org: state.set('org', org) return state
def setSubj(self, *args): status = cfg.getStateNameFromNumber(self.status) if status == 'unknown': self.subj = "Unknown status" else: msg = getattr(self.factory.cfg.defaults, '%s_message' % status) # XXX This try/except is a quick hack that REALLY needs to # be done right... just because it's so ugly... and... # ugly. try: self.subj = msg % args except TypeError: # for "not all arguments converted during string # formatting" self.subj = msg % args[0]
def sendIt(self): if self.status == self.factory.cfg.app.state_definitions.recovering: status_id = self.factory.state.get('current status') status = cfg.getStateNameFromNumber(status_id) self.msg = self.msg + "\r\nRecovering from '%s'." % status sendmail = self.factory.cfg.sendmail frm = self.factory.cfg.mail_from # XXX we probably want to make the actual sending of emails # non-blocking. Dererreds anyone? # XXX modify this when support for escalation and different # group levels is added to pymon for address in cfg.getMailList(self.factory.uid): email = LocalMail() email.setSendmailBinary(sendmail) email.setSubject(self.subj) email.setTo(address) email.setFrom(frm) email.setData(self.msg) email.send() log.info(self.factory.cfg.defaults.sent_message % address)
def getStateName(self, stateID): return cfg.getStateNameFromNumber(stateID)