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)
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
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)
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])
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_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])
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])
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)
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)
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]