diff --git a/vitrage/datasources/aodh/transformer.py b/vitrage/datasources/aodh/transformer.py index e03de9ead..2be053356 100644 --- a/vitrage/datasources/aodh/transformer.py +++ b/vitrage/datasources/aodh/transformer.py @@ -78,6 +78,23 @@ class AodhTransformer(AlarmTransformerBase): update_timestamp=update_timestamp, metadata=metadata) + def _create_snapshot_neighbors(self, entity_event): + return self._create_aodh_neighbors(entity_event) + + def _create_update_neighbors(self, entity_event): + return self._create_aodh_neighbors(entity_event) + + def _create_aodh_neighbors(self, entity_event): + graph_neighbors = entity_event.get(self.QUERY_RESULT, []) + result = [] + for vertex in graph_neighbors: + edge = graph_utils.create_edge( + source_id=self._create_entity_key(entity_event), + target_id=vertex.vertex_id, + relationship_type=EdgeLabels.ON) + result.append(Neighbor(vertex, edge)) + return result + def _create_merge_alarm_vertex(self, entity_event): """Handle an alarm that already has a vitrage_id @@ -102,17 +119,6 @@ class AodhTransformer(AlarmTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): - graph_neighbors = entity_event.get(self.QUERY_RESULT, []) - result = [] - for vertex in graph_neighbors: - edge = graph_utils.create_edge( - source_id=self._create_entity_key(entity_event), - target_id=vertex.vertex_id, - relationship_type=EdgeLabels.ON) - result.append(Neighbor(vertex, edge)) - return result - def _ok_status(self, entity_event): return entity_event[AodhProps.STATE] == self.STATUS_OK diff --git a/vitrage/datasources/cinder/volume/transformer.py b/vitrage/datasources/cinder/volume/transformer.py index 65d669bf9..70118f9ba 100644 --- a/vitrage/datasources/cinder/volume/transformer.py +++ b/vitrage/datasources/cinder/volume/transformer.py @@ -91,17 +91,15 @@ class CinderVolumeTransformer(ResourceTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): - if tbase.is_update_event(entity_event): - attachments_property = 'volume_attachment' - instance_id_property = 'instance_uuid' - else: - attachments_property = 'attachments' - instance_id_property = 'server_id' - + def _create_snapshot_neighbors(self, entity_event): return self._create_instance_neighbors(entity_event, - attachments_property, - instance_id_property) + 'attachments', + 'server_id') + + def _create_update_neighbors(self, entity_event): + return self._create_instance_neighbors(entity_event, + 'volume_attachment', + 'instance_uuid') def _create_entity_key(self, entity_event): diff --git a/vitrage/datasources/nagios/transformer.py b/vitrage/datasources/nagios/transformer.py index 9ca71ba1e..65a01beaa 100644 --- a/vitrage/datasources/nagios/transformer.py +++ b/vitrage/datasources/nagios/transformer.py @@ -76,8 +76,13 @@ class NagiosTransformer(AlarmTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): + def _create_snapshot_neighbors(self, entity_event): + return self._create_nagios_neighbors(entity_event) + def _create_update_neighbors(self, entity_event): + return self._create_nagios_neighbors(entity_event) + + def _create_nagios_neighbors(self, entity_event): vitrage_id = self._create_entity_key(entity_event) timestamp = datetime_utils.change_time_str_format( entity_event[NagiosProperties.LAST_CHECK], diff --git a/vitrage/datasources/neutron/network/transformer.py b/vitrage/datasources/neutron/network/transformer.py index 789a79b9b..718b4014b 100644 --- a/vitrage/datasources/neutron/network/transformer.py +++ b/vitrage/datasources/neutron/network/transformer.py @@ -75,6 +75,3 @@ class NetworkTransformer(ResourceTransformerBase): def _create_update_entity_vertex(self, entity_event): pass - - def _create_neighbors(self, entity_event): - return [] diff --git a/vitrage/datasources/neutron/port/transformer.py b/vitrage/datasources/neutron/port/transformer.py index 31d455410..e6ab7ffb0 100644 --- a/vitrage/datasources/neutron/port/transformer.py +++ b/vitrage/datasources/neutron/port/transformer.py @@ -85,20 +85,17 @@ class PortTransformer(ResourceTransformerBase): def _create_update_entity_vertex(self, entity_event): pass - def _create_neighbors(self, entity_event): - if tbase.is_update_event(entity_event): - device_owner_property = 'device_owner' - device_id_property = 'server_uuid' - net_id_property = 'network_id' - else: - device_owner_property = 'device_owner' - device_id_property = 'device_id' - net_id_property = 'network_id' - + def _create_snapshot_neighbors(self, entity_event): return self._create_port_neighbors(entity_event, - device_owner_property, - device_id_property, - net_id_property) + 'device_owner', + 'device_id', + 'network_id') + + def _create_update_neighbors(self, entity_event): + return self._create_port_neighbors(entity_event, + 'device_owner', + 'server_uuid', + 'network_id') def _create_port_neighbors(self, entity_event, diff --git a/vitrage/datasources/nova/host/transformer.py b/vitrage/datasources/nova/host/transformer.py index 825a07d9e..8e92dc80c 100644 --- a/vitrage/datasources/nova/host/transformer.py +++ b/vitrage/datasources/nova/host/transformer.py @@ -62,8 +62,13 @@ class HostTransformer(ResourceTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): + def _create_snapshot_neighbors(self, entity_event): + return self._create_nova_host_neighbors(entity_event) + def _create_update_neighbors(self, entity_event): + return self._create_nova_host_neighbors(entity_event) + + def _create_nova_host_neighbors(self, entity_event): neighbors = [] # Support snapshot and snapshot_init events only diff --git a/vitrage/datasources/nova/instance/transformer.py b/vitrage/datasources/nova/instance/transformer.py index 72bd64c07..bf46c7800 100644 --- a/vitrage/datasources/nova/instance/transformer.py +++ b/vitrage/datasources/nova/instance/transformer.py @@ -85,8 +85,13 @@ class InstanceTransformer(ResourceTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): + def _create_snapshot_neighbors(self, entity_event): + return self._create_nova_instance_neighbors(entity_event) + def _create_update_neighbors(self, entity_event): + return self._create_nova_instance_neighbors(entity_event) + + def _create_nova_instance_neighbors(self, entity_event): neighbors = [] host_transformer = self.transformers[NOVA_HOST_DATASOURCE] diff --git a/vitrage/datasources/nova/zone/transformer.py b/vitrage/datasources/nova/zone/transformer.py index cd09c1f32..2deac4ca6 100644 --- a/vitrage/datasources/nova/zone/transformer.py +++ b/vitrage/datasources/nova/zone/transformer.py @@ -73,8 +73,13 @@ class ZoneTransformer(ResourceTransformerBase): update_timestamp=update_timestamp, metadata=metadata) - def _create_neighbors(self, entity_event): + def _create_snapshot_neighbors(self, entity_event): + return self._create_nova_zone_neighbors(entity_event) + def _create_update_neighbors(self, entity_event): + return self._create_nova_zone_neighbors(entity_event) + + def _create_nova_zone_neighbors(self, entity_event): zone_vertex_id = self._create_entity_key(entity_event) neighbors = [self._create_cluster_neighbor(zone_vertex_id)] hosts = extract_field_value(entity_event, 'hosts') diff --git a/vitrage/datasources/static_physical/transformer.py b/vitrage/datasources/static_physical/transformer.py index 929b01cbf..f0da7fa4e 100644 --- a/vitrage/datasources/static_physical/transformer.py +++ b/vitrage/datasources/static_physical/transformer.py @@ -71,7 +71,13 @@ class StaticPhysicalTransformer(ResourceTransformerBase): entity_state=state, metadata=metadata) - def _create_neighbors(self, entity_event): + def _create_snapshot_neighbors(self, entity_event): + return self._create_static_physical_neighbors(entity_event) + + def _create_update_neighbors(self, entity_event): + return self._create_static_physical_neighbors(entity_event) + + def _create_static_physical_neighbors(self, entity_event): neighbors = [] entity_type = entity_event[VProps.TYPE] entity_key = self._create_entity_key(entity_event) diff --git a/vitrage/datasources/transformer_base.py b/vitrage/datasources/transformer_base.py index 390250fb5..ee635c4b7 100644 --- a/vitrage/datasources/transformer_base.py +++ b/vitrage/datasources/transformer_base.py @@ -134,7 +134,6 @@ class TransformerBase(object): def _create_update_entity_vertex(self, entity_event): pass - @abc.abstractmethod def _create_neighbors(self, entity_event): """Extracts entity neighbors received from a given entity event. @@ -147,6 +146,17 @@ class TransformerBase(object): :rtype: list """ + if is_update_event(entity_event): + return self._create_update_neighbors(entity_event) + else: + return self._create_snapshot_neighbors(entity_event) + + def _create_snapshot_neighbors(self, entity_event): + return [] + + def _create_update_neighbors(self, entity_event): + return [] + @abc.abstractmethod def _create_entity_key(self, entity_event): """Create entity key from given event diff --git a/vitrage/evaluator/actions/evaluator_event_transformer.py b/vitrage/evaluator/actions/evaluator_event_transformer.py index 9df9467fe..ac63bc5d8 100644 --- a/vitrage/evaluator/actions/evaluator_event_transformer.py +++ b/vitrage/evaluator/actions/evaluator_event_transformer.py @@ -86,8 +86,13 @@ class EvaluatorEventTransformer(transformer_base.TransformerBase): return None - def _create_neighbors(self, event): + def _create_snapshot_neighbors(self, event): + return self._create_vitrage_neighbors(event) + def _create_update_neighbors(self, event): + return self._create_vitrage_neighbors(event) + + def _create_vitrage_neighbors(self, event): event_type = event[EVALUATOR_EVENT_TYPE] timestamp = transformer_base.convert_timestamp_format(