示例#1
0
    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)
示例#2
0
    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)
示例#3
0
文件: tasks.py 项目: crudbug/canopsis
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
示例#4
0
    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
            )
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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
示例#8
0
    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)
示例#9
0
    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
示例#10
0
    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
示例#11
0
    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