コード例 #1
0
ファイル: test_filter.py プロジェクト: capensis/canopsis
    def test_update_correct_alarm(self):
        """
        This test ensures the AlarmFilter updates the right alarm and not old
        ones that are already resolved.

        For that we create two alarms with the same data, but the first one
        will get resolved at a given timestamp.

        The alarmfilter will gather every single alarm, not matter the state
        or the resolved field, then apply the condition on them.
        """
        alarm, value = self.gen_fake_alarm(moment=42)
        self.manager.update_current_alarm(alarm, value)

        coll_alerts = self.manager.alerts_storage._backend

        alarm_doc = list(coll_alerts.find({}))[0]
        alarm['_id'] = alarm_doc['_id']
        # set arbitrary resolution time
        coll_alerts.update(
            {'_id': alarm['_id']},
            {'$set': {'v.resolved': 42, 'v.state.val': 0}}
        )

        alarm2, value2 = self.gen_fake_alarm(moment=4242)
        self.manager.update_current_alarm(alarm2, value2)

        all_alarms = list(coll_alerts.find({}))
        self.assertEqual(all_alarms[0]['v']['resolved'], 42)
        self.assertEqual(all_alarms[1]['v']['resolved'], None)
        self.assertEqual(all_alarms[0]['v']['state']['val'], 0)
        self.assertEqual(all_alarms[1]['v']['state']['val'], 1)

        filter_ = AlarmFilter(
            {
                AlarmFilter.FILTER: {},
                AlarmFilter.FORMAT: "{old} -- 2424",
                AlarmFilter.LIMIT: 100,
                AlarmFilter.REPEAT: 100,
                AlarmFilter.CONDITION: {'v.state.val': 1},
                AlarmFilter.TASKS: [
                    'alerts.systemaction.state_increase',
                    'alerts.useraction.keepstate'
                ]
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger
        )
        filter_.save()

        self.manager.check_alarm_filters()
        all_alarms = list(coll_alerts.find({}))

        self.assertEqual(all_alarms[0]['v']['resolved'], 42)
        self.assertEqual(all_alarms[1]['v']['resolved'], None)
        self.assertEqual(all_alarms[0]['v']['state']['val'], 0)
        self.assertEqual(all_alarms[1]['v']['state']['val'], 2)
コード例 #2
0
    def test_next_run(self):
        delta = 100
        alarm, value = self.gen_fake_alarm(moment=0)
        self.manager.update_current_alarm(alarm, value)
        doc_id = list(self.manager.alerts_storage._backend.find({}))[0]['_id']
        alarm['_id'] = doc_id

        # Check no repeat
        lifter = AlarmFilter({AlarmFilter.REPEAT: 0},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertIsNone(lifter.next_run(alarm))

        # Check simple next run
        lifter = AlarmFilter({AlarmFilter.LIMIT: delta},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.next_run(alarm) >= delta)

        # Check next next run date
        value[AlarmField.alarmfilter.value] = {}
        value[AlarmField.alarmfilter.value][AlarmFilterField.runs.value] = {
            alarm['_id']: [666]
        }
        self.manager.update_current_alarm(alarm, value)
        lifter = AlarmFilter({
            AlarmFilter.LIMIT: delta,
            AlarmFilter.REPEAT: 2
        },
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertEqual(lifter.next_run(alarm), 666 + delta)
コード例 #3
0
ファイル: test_filter.py プロジェクト: capensis/canopsis
    def test_check_alarm(self):
        alarm, value = self.gen_fake_alarm()
        self.manager.update_current_alarm(alarm, value)

        # get back the alert's MongoDB ID for AlarmFilter
        doc = self.manager.alerts_storage._backend.find({})
        alarm['_id'] = list(doc)[0]['_id']

        lifter = AlarmFilter(element={},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))

        lifter = AlarmFilter(
            element={
                AlarmFilter.CONDITION: {"cacao": {"$eq": 'maigre'}},
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger)
        self.assertFalse(lifter.check_alarm(alarm))

        lifter = AlarmFilter(
            element={
                AlarmFilter.CONDITION: {"v.component": {"$eq": 'bb'}},
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger)
        self.assertFalse(lifter.check_alarm(alarm))

        lifter = AlarmFilter(
            element={
                AlarmFilter.CONDITION: {"v.component": {"$eq": 'c'}},
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))

        lifter = AlarmFilter(
            element={
                AlarmFilter.CONDITION: {"v.state.val": {"$gte": 1}},
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))
コード例 #4
0
ファイル: test_filter.py プロジェクト: capensis/canopsis
    def test_output(self):
        alarm, value = self.gen_fake_alarm()
        self.manager.update_current_alarm(alarm, value)

        lifter = AlarmFilter({AlarmFilter.FORMAT: ""},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)

        self.assertEqual(lifter.output(''), "")

        lifter = AlarmFilter({AlarmFilter.FORMAT: "{old} -- foo"},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)

        self.assertEqual(lifter.output('toto'), "toto -- foo")
コード例 #5
0
    def gen_alarm_filter(self, update={}, storage=None):
        """
        Generate a standard alarm filter.
        """
        base = {
            AlarmFilter.LIMIT: 180.0,
            AlarmFilter.FILTER: '',
            AlarmFilter.CONDITION: {},
            AlarmFilter.TASKS: ['alerts.systemaction.state_increase'],
        }

        dictio = merge_two_dicts(base, update)

        return AlarmFilter(dictio, logger=self.logger, storage=storage)
コード例 #6
0
    def test_output(self):
        alarm, value = self.gen_fake_alarm()
        self.manager.update_current_alarm(alarm, value)

        lifter = AlarmFilter({AlarmFilter.FORMAT: ""},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)

        self.assertEqual(lifter.output(''), "")

        lifter = AlarmFilter({AlarmFilter.FORMAT: "{old} -- foo"},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)

        self.assertEqual(lifter.output('toto'), "toto -- foo")
コード例 #7
0
ファイル: test_filter.py プロジェクト: capensis/canopsis
    def test_next_run(self):
        delta = 100
        alarm, value = self.gen_fake_alarm(moment=0)
        self.manager.update_current_alarm(alarm, value)
        doc_id = list(self.manager.alerts_storage._backend.find({}))[0]['_id']
        alarm['_id'] = doc_id

        # Check no repeat
        lifter = AlarmFilter({AlarmFilter.REPEAT: 0},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertIsNone(lifter.next_run(alarm))

        # Check simple next run
        lifter = AlarmFilter({AlarmFilter.LIMIT: delta},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.next_run(alarm) >= delta)

        # Check next next run date
        value[AlarmField.alarmfilter.value] = {}
        value[AlarmField.alarmfilter.value][AlarmFilterField.runs.value] = {
            alarm['_id']: [666]
        }
        self.manager.update_current_alarm(alarm, value)
        lifter = AlarmFilter(
            {
                AlarmFilter.LIMIT: delta,
                AlarmFilter.REPEAT: 2
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger
        )
        self.assertEqual(lifter.next_run(alarm), 666 + delta)
コード例 #8
0
    def test_update_correct_alarm(self):
        """
        This test ensures the AlarmFilter updates the right alarm and not old
        ones that are already resolved.

        For that we create two alarms with the same data, but the first one
        will get resolved at a given timestamp.

        The alarmfilter will gather every single alarm, not matter the state
        or the resolved field, then apply the condition on them.
        """
        alarm, value = self.gen_fake_alarm(moment=42)
        self.manager.update_current_alarm(alarm, value)

        coll_alerts = self.manager.alerts_storage._backend

        alarm_doc = list(coll_alerts.find({}))[0]
        alarm['_id'] = alarm_doc['_id']
        # set arbitrary resolution time
        coll_alerts.update({'_id': alarm['_id']},
                           {'$set': {
                               'v.resolved': 42,
                               'v.state.val': 0
                           }})

        alarm2, value2 = self.gen_fake_alarm(moment=4242)
        self.manager.update_current_alarm(alarm2, value2)

        all_alarms = list(coll_alerts.find({}))
        self.assertEqual(all_alarms[0]['v']['resolved'], 42)
        self.assertEqual(all_alarms[1]['v']['resolved'], None)
        self.assertEqual(all_alarms[0]['v']['state']['val'], 0)
        self.assertEqual(all_alarms[1]['v']['state']['val'], 1)

        filter_ = AlarmFilter(
            {
                AlarmFilter.FILTER: {},
                AlarmFilter.FORMAT:
                "{old} -- 2424",
                AlarmFilter.LIMIT:
                100,
                AlarmFilter.REPEAT:
                100,
                AlarmFilter.CONDITION: {
                    'v.state.val': 1
                },
                AlarmFilter.TASKS: [
                    'alerts.systemaction.state_increase',
                    'alerts.useraction.keepstate'
                ]
            },
            storage=self.filter_storage,
            alarm_storage=self.alerts_storage,
            logger=self.logger)
        filter_.save()

        self.manager.check_alarm_filters()
        all_alarms = list(coll_alerts.find({}))

        self.assertEqual(all_alarms[0]['v']['resolved'], 42)
        self.assertEqual(all_alarms[1]['v']['resolved'], None)
        self.assertEqual(all_alarms[0]['v']['state']['val'], 0)
        self.assertEqual(all_alarms[1]['v']['state']['val'], 2)
コード例 #9
0
    def test_check_alarm(self):
        alarm, value = self.gen_fake_alarm()
        self.manager.update_current_alarm(alarm, value)

        # get back the alert's MongoDB ID for AlarmFilter
        doc = self.manager.alerts_storage._backend.find({})
        alarm['_id'] = list(doc)[0]['_id']

        lifter = AlarmFilter(element={},
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))

        lifter = AlarmFilter(element={
            AlarmFilter.CONDITION: {
                "cacao": {
                    "$eq": 'maigre'
                }
            },
        },
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertFalse(lifter.check_alarm(alarm))

        lifter = AlarmFilter(element={
            AlarmFilter.CONDITION: {
                "v.component": {
                    "$eq": 'bb'
                }
            },
        },
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertFalse(lifter.check_alarm(alarm))

        lifter = AlarmFilter(element={
            AlarmFilter.CONDITION: {
                "v.component": {
                    "$eq": 'c'
                }
            },
        },
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))

        lifter = AlarmFilter(element={
            AlarmFilter.CONDITION: {
                "v.state.val": {
                    "$gte": 1
                }
            },
        },
                             storage=self.filter_storage,
                             alarm_storage=self.alerts_storage,
                             logger=self.logger)
        self.assertTrue(lifter.check_alarm(alarm))