summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Runge <mrunge@redhat.com>2021-06-30 19:45:36 +0200
committerMatthias Runge <mrunge@redhat.com>2021-06-30 19:55:14 +0200
commit625505790fe4123c2d806afdc28c11df1d8114f3 (patch)
treea17b93167d9be6ae9261040d35d19cc2c1f94a82
parent62bb51e269e513f17c67711b5bbc1fbead962ebf (diff)
downloadceilometer-625505790fe4123c2d806afdc28c11df1d8114f3.tar.gz
Notify and update snapshot metrics
when a volume with an attached snapshot is transferred to a different project. Change-Id: I907b9b1c912d9794ada796494b172d290901993a
-rw-r--r--ceilometer/pipeline/data/event_definitions.yaml14
-rw-r--r--ceilometer/publisher/data/gnocchi_resources.yaml5
-rw-r--r--ceilometer/tests/unit/publisher/test_gnocchi.py44
3 files changed, 59 insertions, 4 deletions
diff --git a/ceilometer/pipeline/data/event_definitions.yaml b/ceilometer/pipeline/data/event_definitions.yaml
index b8fcc8a5..8e6bdb00 100644
--- a/ceilometer/pipeline/data/event_definitions.yaml
+++ b/ceilometer/pipeline/data/event_definitions.yaml
@@ -69,7 +69,7 @@
audit_period_ending:
type: datetime
fields: payload.audit_period_ending
-- event_type: ['volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*']
+- event_type: ['volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.exists', 'snapshot.create.*', 'snapshot.delete.*', 'snapshot.update.*', 'volume.transfer.accept.end', 'snapshot.transfer.accept.end']
traits: &cinder_traits
user_id:
fields: payload.user_id
@@ -89,8 +89,8 @@
image_id:
fields: payload.glance_metadata[?key=image_id].value
instance_id:
- fields: payload.volume_attachment[0].instance_uuid
-- event_type: ['volume.transfer.*','volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*']
+ fields: payload.volume_attachment[0].server_id
+- event_type: ['volume.transfer.*', 'volume.exists', 'volume.retype', 'volume.create.*', 'volume.delete.*', 'volume.resize.*', 'volume.attach.*', 'volume.detach.*', 'volume.update.*', 'snapshot.transfer.accept.end']
traits:
<<: *cinder_traits
resource_id:
@@ -104,6 +104,13 @@
fields: payload.volume_type
replication_status:
fields: payload.replication_status
+- event_type: ['snapshot.transfer.accept.end']
+ traits:
+ <<: *cinder_traits
+ resource_id:
+ fields: payload.snapshot_id
+ project_id:
+ fields: payload.tenant_id
- event_type: ['share.create.*', 'share.delete.*', 'share.extend.*', 'share.shrink.*']
traits: &share_traits
share_id:
@@ -687,3 +694,4 @@
fields: payload.detail
type:
fields: payload.type
+
diff --git a/ceilometer/publisher/data/gnocchi_resources.yaml b/ceilometer/publisher/data/gnocchi_resources.yaml
index bfb9fa39..63afe58d 100644
--- a/ceilometer/publisher/data/gnocchi_resources.yaml
+++ b/ceilometer/publisher/data/gnocchi_resources.yaml
@@ -250,7 +250,9 @@ resources:
event_delete:
- volume.delete.end
- snapshot.delete.end
- event_update: volume.transfer.accept.end
+ event_update:
+ - volume.transfer.accept.end
+ - snapshot.transfer.accept.end
event_attributes:
id: resource_id
project_id: project_id
@@ -414,3 +416,4 @@ resources:
network.services.lb.total.connections:
network.services.lb.active.connections:
+
diff --git a/ceilometer/tests/unit/publisher/test_gnocchi.py b/ceilometer/tests/unit/publisher/test_gnocchi.py
index 770eea2b..dcaf8c11 100644
--- a/ceilometer/tests/unit/publisher/test_gnocchi.py
+++ b/ceilometer/tests/unit/publisher/test_gnocchi.py
@@ -174,6 +174,28 @@ VOLUME_TRANSFER_ACCEPT_END = models.Event(
message_id=u'9fc4ceee-d980-4098-a685-2ad660838ac1'
)
+SNAPSHOT_TRANSFER_ACCEPT_END = models.Event(
+ event_type='snapshot.transfer.accept.end',
+ traits=[models.Trait(u'tenant_id', 1, '945e7d09220e4308abe4b3b734bf5fce>'),
+ models.Trait(u'project_id', 1, '85bc015f7a2342348593077a927c4aaa'),
+ models.Trait(u'user_id', 1, '945e7d09220e4308abe4b3b734bf5fce'),
+ models.Trait(u'service', 1, 'volume.controller-0'),
+ models.Trait(
+ u'request_id', 1, 'req-71dd1ae4-81ca-431a-b9fd-ac833eba889f'),
+ models.Trait(
+ u'resource_id', 1, '156b8d3f-ad99-429b-b84c-3f263fb2a801'),
+ models.Trait(
+ u'display_name', 1, 'test-vol'),
+ models.Trait(
+ u'type', 1, 'req-71dd1ae4-81ca-431a-b9fd-ac833eba889f'),
+ models.Trait(u'host', 1, 'hostgroup@tripleo_iscsi#tripleo_iscsi'),
+ models.Trait(u'created_at', 4, '2020-08-28 12:51:52'),
+ models.Trait(u'size', 2, 1)],
+ raw={},
+ generated='2020-08-28T12:52:22.930413',
+ message_id=u'9fc4ceee-d980-4098-a685-2ad660838ac1'
+)
+
class PublisherTest(base.BaseTestCase):
@@ -645,6 +667,28 @@ class PublisherWorkflowTest(base.BaseTestCase,
for call in expected_calls:
self.assertIn(call, fakeclient.mock_calls)
+ @mock.patch('gnocchiclient.v1.client.Client')
+ def test_update_snapshot_event_workflow(self, fakeclient_cls):
+ url = netutils.urlsplit("gnocchi://")
+ self.publisher = gnocchi.GnocchiPublisher(self.conf.conf, url)
+
+ fakeclient = fakeclient_cls.return_value
+
+ now = timeutils.utcnow()
+ self.useFixture(utils_fixture.TimeFixture(now))
+
+ expected_calls = [
+ mock.call.resource.update(
+ 'volume',
+ '156b8d3f-ad99-429b-b84c-3f263fb2a801',
+ {'project_id': '85bc015f7a2342348593077a927c4aaa'}),
+ ]
+
+ self.publisher.publish_events([SNAPSHOT_TRANSFER_ACCEPT_END])
+ self.assertEqual(1, len(fakeclient.mock_calls))
+ for call in expected_calls:
+ self.assertIn(call, fakeclient.mock_calls)
+
@mock.patch('ceilometer.publisher.gnocchi.LOG')
@mock.patch('gnocchiclient.v1.client.Client')
def test_workflow(self, fakeclient_cls, logger):