summaryrefslogtreecommitdiff
path: root/ceilometer/publisher
diff options
context:
space:
mode:
authorpleimer <pfbleimer@gmail.com>2020-08-27 11:51:14 -0400
committerpleimer <pfbleimer@gmail.com>2020-08-28 10:03:45 -0400
commitaa6b4e86421312665155485e0018643939f48572 (patch)
treee992d8c887867dd0cdebb68fd72a65fe7a7e3988 /ceilometer/publisher
parent648ce9b6687e43d504d53111725200734053357e (diff)
downloadceilometer-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.yaml2
-rw-r--r--ceilometer/publisher/gnocchi.py30
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'],