def test_get_last_status(self): got = get_last_status(self.alarm) self.assertEqual(got, OFF) self.alarm[AlarmField.status.value] = { '_t': 'statusinc', 't': 0, 'a': 'test', 'm': 'test', 'val': ONGOING } got = get_last_status(self.alarm) self.assertEqual(got, ONGOING)
def test_get_last_status(self): got = get_last_status(self.alarm) self.assertEqual(got, OFF) self.alarm['status'] = { '_t': 'statusinc', 't': 0, 'a': 'test', 'm': 'test', 'val': ONGOING } got = get_last_status(self.alarm) self.assertEqual(got, ONGOING)
def restore(manager, alarm, author, message, event): """ Called when an alarm is restored by a user. """ step = { '_t': 'uncancel', 't': event['timestamp'], 'a': author, 'm': message } canceled = alarm['canceled'] alarm['canceled'] = None alarm['steps'].append(step) status = None if manager.restore_event: status = get_last_status(alarm, ts=canceled['t']) else: status = compute_status(manager, alarm) return alarm, status
def archive_status(self, alarm, status, event): """ Archive status if needed. :param alarm: Alarm associated to status change event :type alarm: dict :param status: New status to archive :type status: int :param event: Associated event :type event: dict """ value = alarm.get(self[Alerts.ALARM_STORAGE].VALUE) old_status = get_last_status(value, ts=event['timestamp']) if status != old_status: self.change_of_status( alarm, old_status, status, event )
def resolve_alarms(self, alarms): """ Loop over all unresolved alarms, and check if it can be resolved. :param alarms: a list of unresolved alarms :return: a list of unresolved alarms (excluding locally processed alarms) :deprecated: see canopsis.alarms """ self.logger.info( "DEPRECATED: see the canopsis.alarms package instead.") for data_id in alarms: for docalarm in alarms[data_id]: docalarm[self.alerts_storage.DATA_ID] = data_id alarm = docalarm.get(self.alerts_storage.VALUE) if get_last_status(alarm) == OFF: t = alarm[AlarmField.status.value]['t'] now = int(time()) if (now - t) > self.flapping_interval: alarm[AlarmField.resolved.value] = t self.update_current_alarm(docalarm, alarm) alarms[data_id].remove(docalarm) return alarms
def resolve_alarms(self, alarms): """ Loop over all unresolved alarms, and check if it can be resolved. :param alarms: a list of unresolved alarms :return: a list of unresolved alarms (excluding locally processed alarms) :deprecated: see canopsis.alarms """ self.logger.info("DEPRECATED: see the canopsis.alarms package instead.") for data_id in alarms: for docalarm in alarms[data_id]: docalarm[self.alerts_storage.DATA_ID] = data_id alarm = docalarm.get(self.alerts_storage.VALUE) if get_last_status(alarm) == OFF: t = alarm[AlarmField.status.value]['t'] now = int(time()) if (now - t) > self.flapping_interval: alarm[AlarmField.resolved.value] = t self.update_current_alarm(docalarm, alarm) alarms[data_id].remove(docalarm) return alarms
def update_status(self, alarm, status, event): """ Update alarm status if needed. :param dict alarm: Alarm associated to status change event :param int status: New status to archive :param dict event: Associated event :return: updated alarm :rtype: dict """ value = alarm.get(self.alerts_storage.VALUE) old_status = get_last_status(value, ts=event['timestamp']) if status != old_status: return self.change_of_status(alarm, old_status, status, event) return alarm
def resolve_alarms(self): """ Loop over all unresolved alarms, and check if it can be resolved. """ storage = self[Alerts.ALARM_STORAGE] result = self.get_alarms(resolved=False) for data_id in result: for docalarm in result[data_id]: docalarm[storage.DATA_ID] = data_id alarm = docalarm.get(storage.VALUE) if get_last_status(alarm) == OFF: t = alarm['status']['t'] now = int(time()) if (now - t) > self.flapping_interval: alarm['resolved'] = t self.update_current_alarm(docalarm, alarm)
def resolve_stealthy(self, alarms): """ Loop over all stealthy alarms, and check if it can be return to off status. :param alarms: a list of unresolved alarms :return: a list of unresolved alarms (excluding locally processed alarms) :deprecated: see canopsis.alarms """ self.logger.info("DEPRECATED: see the canopsis.alarms package instead.") for data_id in alarms: for docalarm in alarms[data_id]: docalarm[self.alerts_storage.DATA_ID] = data_id alarm = docalarm.get(self.alerts_storage.VALUE) # Only look at stealthy status if get_last_status(alarm) != STEALTHY: continue # Is the state stealthy still valid ? if is_stealthy(self, alarm): continue event = { 'timestamp': int(time()), # now 'output': 'automaticly resolved after stealthy shown time', 'connector': alarm['connector'], 'connector_name': alarm['connector_name'] } # Updating the alarm state alarm_new = self.change_of_status( docalarm, STEALTHY, OFF, event ) self.update_current_alarm(docalarm, alarm_new['value']) alarms[data_id].remove(docalarm) return alarms
def update_status(self, alarm, status, event): """ Update alarm status if needed. :param dict alarm: Alarm associated to status change event :param int status: New status to archive :param dict event: Associated event :return: updated alarm :rtype: dict """ value = alarm.get(self.alerts_storage.VALUE) old_status = get_last_status(value, ts=event['timestamp']) if status != old_status: return self.change_of_status( alarm, old_status, status, event ) return alarm