Esempio n. 1
0
 def _create_mock_events():
     gen_list = mock_sync.simple_zone_generators(
         2, 4, snapshot_events=2, snap_vals={'sync_mode': 'init_snapshot'})
     gen_list += mock_sync.simple_host_generators(
         2, 4, 4, snap_vals={'sync_mode': 'init_snapshot'})
     gen_list += mock_sync.simple_instance_generators(
         4, 15, 15, snap_vals={'sync_mode': 'init_snapshot'})
     return mock_sync.generate_sequential_events_list(gen_list)
Esempio n. 2
0
    def _get_alarms(self):
        alarms = []
        for service_data in self.service_datas:
            generators = mock_driver.simple_nagios_alarm_generators(
                host_num=1,
                events_num=1,
                snap_vals=service_data)
            alarms.append(
                mock_driver.generate_sequential_events_list(generators)[0])

        return alarms
Esempio n. 3
0
 def _create_mock_events(self):
     gen_list = mock_driver.simple_zone_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         snapshot_events=self.NUM_ZONES,
         snap_vals={DSProps.SYNC_MODE: SyncMode.INIT_SNAPSHOT})
     gen_list += mock_driver.simple_host_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         self.NUM_HOSTS,
         snap_vals={DSProps.SYNC_MODE: SyncMode.INIT_SNAPSHOT})
     gen_list += mock_driver.simple_instance_generators(
         self.NUM_HOSTS,
         self.NUM_INSTANCES,
         self.NUM_INSTANCES,
         snap_vals={DSProps.SYNC_MODE: SyncMode.INIT_SNAPSHOT})
     return mock_driver.generate_sequential_events_list(gen_list)
Esempio n. 4
0
 def _create_mock_events(self):
     gen_list = mock_sync.simple_zone_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         snapshot_events=self.NUM_ZONES,
         snap_vals={DSProps.DATASOURCE_ACTION:
                    DatasourceAction.INIT_SNAPSHOT})
     gen_list += mock_sync.simple_host_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         self.NUM_HOSTS,
         snap_vals={DSProps.DATASOURCE_ACTION:
                    DatasourceAction.INIT_SNAPSHOT})
     gen_list += mock_sync.simple_instance_generators(
         self.NUM_HOSTS,
         self.NUM_INSTANCES,
         self.NUM_INSTANCES,
         snap_vals={DSProps.DATASOURCE_ACTION:
                    DatasourceAction.INIT_SNAPSHOT})
     return mock_sync.generate_sequential_events_list(gen_list)
    def test_nagios_alarm_transform(self):
        LOG.debug('Nagios alarm transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_nagios_alarm_generators(host_num=4,
                                                             events_num=10)
        nagios_alarms = mock_sync.generate_sequential_events_list(spec_list)

        for alarm in nagios_alarms:
            # Test action
            wrapper = NagiosTransformer(self.transformers).transform(alarm)
            self._validate_vertex(wrapper.vertex, alarm)

            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            neighbor = neighbors[0]

            # Right now we are support only host as a resource
            if neighbor.vertex[VProps.TYPE] == NOVA_HOST_DATASOURCE:
                self._validate_host_neighbor(neighbors[0], alarm)

            self._validate_action(alarm, wrapper)
    def test_extract_key(self):
        LOG.debug('Test get key from nova instance transformer')

        # Test setup
        spec_list = mock_sync.simple_nagios_alarm_generators(host_num=1,
                                                             events_num=1)
        nagios_alarms = mock_sync.generate_sequential_events_list(spec_list)
        transformer = NagiosTransformer(self.transformers)

        event = nagios_alarms[0]
        # Test action
        observed_key = transformer._create_entity_key(event)

        # Test assertions
        observed_key_fields = observed_key.split(
            TransformerBase.KEY_SEPARATOR)

        self.assertEqual(EntityCategory.ALARM, observed_key_fields[0])
        self.assertEqual(event[DSProps.SYNC_TYPE], observed_key_fields[1])
        self.assertEqual(event[NagiosProperties.RESOURCE_NAME],
                         observed_key_fields[2])
        self.assertEqual(event[NagiosProperties.SERVICE],
                         observed_key_fields[3])
Esempio n. 7
0
 def _create_mock_events(self):
     gen_list = mock_sync.simple_zone_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         snapshot_events=self.NUM_ZONES,
         snap_vals={
             DSProps.DATASOURCE_ACTION: DatasourceAction.INIT_SNAPSHOT
         })
     gen_list += mock_sync.simple_host_generators(
         self.NUM_ZONES,
         self.NUM_HOSTS,
         self.NUM_HOSTS,
         snap_vals={
             DSProps.DATASOURCE_ACTION: DatasourceAction.INIT_SNAPSHOT
         })
     gen_list += mock_sync.simple_instance_generators(
         self.NUM_HOSTS,
         self.NUM_INSTANCES,
         self.NUM_INSTANCES,
         snap_vals={
             DSProps.DATASOURCE_ACTION: DatasourceAction.INIT_SNAPSHOT
         })
     return mock_sync.generate_sequential_events_list(gen_list)
Esempio n. 8
0
    def test_zabbix_alarm_transform(self):
        LOG.debug('Zabbix alarm transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_zabbix_alarm_generators(host_num=4,
                                                             events_num=10)
        zabbix_alarms = mock_sync.generate_sequential_events_list(spec_list)

        for alarm in zabbix_alarms:
            # Test action
            self.enrich_event(alarm, format_timestamp=False)
            wrapper = ZabbixTransformer(self.transformers, self.conf)\
                .transform(alarm)
            self._validate_vertex(wrapper.vertex, alarm)

            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            neighbor = neighbors[0]

            # Right now we are support only host as a resource
            if neighbor.vertex[VProps.TYPE] == NOVA_HOST_DATASOURCE:
                self._validate_host_neighbor(neighbors[0], alarm)

            self._validate_action(alarm, wrapper)
    def test_extract_key(self):
        LOG.debug('Test get key from nova instance transformer')

        # Test setup
        spec_list = mock_sync.simple_zabbix_alarm_generators(host_num=1,
                                                             events_num=1)
        zabbix_alarms = mock_sync.generate_sequential_events_list(spec_list)
        transformer = ZabbixTransformer(self.transformers, self.conf)
        event = zabbix_alarms[0]
        self.enrich_event(event)

        # Test action
        observed_key = transformer._create_entity_key(event)

        # Test assertions
        observed_key_fields = observed_key.split(
            TransformerBase.KEY_SEPARATOR)

        self.assertEqual(EntityCategory.ALARM, observed_key_fields[0])
        self.assertEqual(event[DSProps.SYNC_TYPE], observed_key_fields[1])
        self.assertEqual(event[ZabbixProps.RESOURCE_NAME],
                         observed_key_fields[2])
        self.assertEqual(event[ZabbixProps.TRIGGER_ID],
                         observed_key_fields[3])
Esempio n. 10
0
    def test_zabbix_alarm_transform(self):
        LOG.debug('Zabbix alarm transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_zabbix_alarm_generators(host_num=4,
                                                             events_num=10)
        zabbix_alarms = mock_sync.generate_sequential_events_list(spec_list)

        for alarm in zabbix_alarms:
            # Test action
            self.enrich_event(alarm, format_timestamp=False)
            wrapper = ZabbixTransformer(self.transformers, self.conf)\
                .transform(alarm)
            self._validate_vertex(wrapper.vertex, alarm)

            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            neighbor = neighbors[0]

            # Right now we are support only host as a resource
            if neighbor.vertex[VProps.TYPE] == NOVA_HOST_DATASOURCE:
                self._validate_host_neighbor(neighbors[0], alarm)

            self._validate_action(alarm, wrapper)
Esempio n. 11
0
    def test_extract_key(self):
        LOG.debug('Test get key from nova instance transformer')

        # Test setup
        spec_list = mock_sync.simple_zabbix_alarm_generators(host_num=1,
                                                             events_num=1)
        zabbix_alarms = mock_sync.generate_sequential_events_list(spec_list)
        transformer = ZabbixTransformer(self.transformers, self.conf)
        event = zabbix_alarms[0]
        self.enrich_event(event)

        # Test action
        observed_key = transformer._create_entity_key(event)

        # Test assertions
        observed_key_fields = observed_key.split(
            TransformerBase.KEY_SEPARATOR)

        self.assertEqual(EntityCategory.ALARM, observed_key_fields[0])
        self.assertEqual(event[DSProps.ENTITY_TYPE], observed_key_fields[1])
        self.assertEqual(event[ZabbixProps.RESOURCE_NAME],
                         observed_key_fields[2])
        self.assertEqual(event[ZabbixProps.TRIGGER_ID],
                         observed_key_fields[3])
Esempio n. 12
0
    def test_enrich_event(self):

        aodh_driver = MockAodhDriver(self.conf)

        # 1. alarm creation with 'ok' state
        # prepare data
        detail_data = {"type": "creation",
                       AodhProps.DETAIL: self._extract_alarm_data()}
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status OK should not be handled
        self.assertIsNone(entity)

        # 2.alarm state transition from 'ok' to 'alarm'
        detail_data = {"type": "state transition",
                       AodhProps.DETAIL: {AodhProps.STATE: "alarm"}}
        alarm.update(detail_data)
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: ok->alarm, need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 3. delete alarm which is 'alarm' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.DELETION)

        # 4. alarm creation with 'alarm' state
        # prepare data
        detail_data = {"type": "creation",
                       AodhProps.DETAIL:
                           self._extract_alarm_data(state="alarm")}
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status 'alarm' need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.SEVERITY])
        self.assertIsNone(entity[AodhProps.RESOURCE_ID])
        self.assertEqual("*", entity[AodhProps.EVENT_TYPE])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.CREATION)

        # 5. alarm rule change
        # prepare data
        detail_data = {"type": "rule change",
                       AodhProps.DETAIL: {
                           "severity": "critical",
                           AodhProps.RULE:
                               {"query": [{"field": "traits.resource_id",
                                           "type": "",
                                           "value": "1",
                                           "op": "eq"}],
                                "event_type": "instance.update"}}}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.RULE_CHANGE)

        # Test assertions
        # alarm rule change: need to be update
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.DETAIL][AodhProps.SEVERITY])
        self.assertEqual(
            entity[AodhProps.EVENT_TYPE],
            alarm[AodhProps.DETAIL][AodhProps.RULE][AodhProps.EVENT_TYPE])
        self.assertEqual("1", entity[AodhProps.RESOURCE_ID])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.RULE_CHANGE)

        # 6. alarm state change from 'alarm' to 'ok'
        # prepare data
        detail_data = {"type": "state transition",
                       AodhProps.DETAIL: {AodhProps.STATE: "ok"}}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: alarm->OK, need to be deleted
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 7. delete alarm which is 'ok' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNone(entity)
Esempio n. 13
0
    def test_gnocchi_threshold_alarm_notifications(self):
        aodh_driver = MockAodhDriver(self.conf)

        # 1. alarm creation with 'ok' state
        # prepare data
        detail_data = {
            "type": "gnocchi_resources_threshold",
            AodhProps.DETAIL: self._create_alarm_data_gnocchi()
        }
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status OK should not be handled
        self.assertIsNone(entity)

        # 2.alarm state transition from 'ok' to 'alarm'
        detail_data = {
            "type": "state transition",
            AodhProps.DETAIL: {
                AodhProps.STATE: "alarm"
            }
        }
        alarm.update(detail_data)
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: ok->alarm, need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY], alarm[AodhProps.SEVERITY])

        # 3. delete alarm which is 'alarm' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.DELETION)

        # 4. alarm creation with 'alarm' state
        # prepare data
        detail_data = {
            "type": "gnocchi_resources_threshold",
            AodhProps.DETAIL: self._create_alarm_data_gnocchi(state="alarm")
        }
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status 'alarm' need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY], alarm[AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.CREATION)

        # 5. alarm rule change
        # prepare data
        detail_data = {
            "type": "rule change",
            AodhProps.DETAIL: {
                "severity": "critical",
                AodhProps.RULE: {
                    "granularity": "300",
                    "threshold": "0.0123",
                    "comparison_operator": "eq"
                }
            }
        }
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.RULE_CHANGE)

        # Test assertions
        # alarm rule change: need to be update
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.DETAIL][AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.RULE_CHANGE)

        # 6. alarm state change from 'alarm' to 'ok'
        # prepare data
        detail_data = {
            "type": "state transition",
            AodhProps.DETAIL: {
                AodhProps.STATE: "ok"
            }
        }
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: alarm->OK, need to be deleted
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 7. delete alarm which is 'ok' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNone(entity)
Esempio n. 14
0
    def _generate_event(update_vals=None):
        generators = mock_driver.simple_prometheus_alarm_generators(
            update_vals=update_vals)

        return mock_driver.generate_sequential_events_list(generators)[0]