diff options
author | pleimer <pfbleimer@gmail.com> | 2020-08-27 11:51:14 -0400 |
---|---|---|
committer | pleimer <pfbleimer@gmail.com> | 2020-08-28 10:03:45 -0400 |
commit | aa6b4e86421312665155485e0018643939f48572 (patch) | |
tree | e992d8c887867dd0cdebb68fd72a65fe7a7e3988 /ceilometer/publisher | |
parent | 648ce9b6687e43d504d53111725200734053357e (diff) | |
download | ceilometer-aa6b4e86421312665155485e0018643939f48572.tar.gz |
Add logic for event_update handling and set transfer event as event_update
This patch implements logic for updating resources in gnocchi when an
event_update happens. Additionally, it adds volume.transfer events to
the event_definitions.yaml and attributes for said event in
gnocchi_resources.yaml
Change-Id: I15bc4e1589f92fc856876a563122c1a1e07d4c4a
Diffstat (limited to 'ceilometer/publisher')
-rw-r--r-- | ceilometer/publisher/data/gnocchi_resources.yaml | 2 | ||||
-rw-r--r-- | ceilometer/publisher/gnocchi.py | 30 |
2 files changed, 32 insertions, 0 deletions
diff --git a/ceilometer/publisher/data/gnocchi_resources.yaml b/ceilometer/publisher/data/gnocchi_resources.yaml index 14b21464..bfb9fa39 100644 --- a/ceilometer/publisher/data/gnocchi_resources.yaml +++ b/ceilometer/publisher/data/gnocchi_resources.yaml @@ -250,8 +250,10 @@ resources: event_delete: - volume.delete.end - snapshot.delete.end + event_update: volume.transfer.accept.end event_attributes: id: resource_id + project_id: project_id - resource_type: volume_provider metrics: diff --git a/ceilometer/publisher/gnocchi.py b/ceilometer/publisher/gnocchi.py index 9f51bc4d..c04face3 100644 --- a/ceilometer/publisher/gnocchi.py +++ b/ceilometer/publisher/gnocchi.py @@ -495,6 +495,23 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): self._delete_event(rd, event) if operation == EVENT_CREATE: self._create_event(rd, event) + if operation == EVENT_UPDATE: + self._update_event(rd, event) + + def _update_event(self, rd, event): + resource = rd.event_attributes(event) + associated_resources = rd.cfg.get('event_associated_resources', {}) + + if associated_resources: + to_update = itertools.chain([resource], *[ + self._search_resource(resource_type, query % resource['id']) + for resource_type, query in associated_resources.items() + ]) + else: + to_update = [resource] + + for resource in to_update: + self._set_update_attributes(resource) def _delete_event(self, rd, event): ended_at = timeutils.utcnow().isoformat() @@ -537,6 +554,19 @@ class GnocchiPublisher(publisher.ConfigPublisherBase): exc_info=True) return [] + def _set_update_attributes(self, resource): + try: + resource_id = resource.pop('id') + resource_type = resource.pop('type') + + self._if_not_cached(resource_type, resource_id, resource) + except gnocchi_exc.ResourceNotFound: + LOG.debug("Update event received on unexisting resource (%s), " + "ignore it.", resource['id']) + except Exception: + LOG.error("Fail to update the resource %s", resource, + exc_info=True) + def _set_ended_at(self, resource, ended_at): try: self._gnocchi.resource.update(resource['type'], resource['id'], |