From e26f7c6af515ccd6e985aa4546dea5105c9c6e39 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Mon, 17 Feb 2014 11:20:19 +0100 Subject: [PATCH] api: export recorded_at in returned samples Change-Id: I970bc82d70fd75cbb25ea6c7e0778521aaa9b255 Blueprint: storage-sample-timestamp --- ceilometer/api/controllers/v2.py | 9 +++++++++ ceilometer/tests/api/v2/test_list_events_scenarios.py | 5 +++++ ceilometer/tests/api/v2/test_list_meters_scenarios.py | 2 ++ 3 files changed, 16 insertions(+) diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index 4690d67fd..d52b12d71 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -569,6 +569,9 @@ class OldSample(_Base): timestamp = datetime.datetime "UTC date and time when the measurement was made" + recorded_at = datetime.datetime + "When the sample has been recorded." + resource_metadata = {wtypes.text: wtypes.text} "Arbitrary metadata associated with the resource" @@ -601,6 +604,7 @@ class OldSample(_Base): resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36', project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', + recorded_at=datetime.datetime.utcnow(), timestamp=datetime.datetime.utcnow(), resource_metadata={'name1': 'value1', 'name2': 'value2'}, @@ -924,6 +928,9 @@ class Sample(_Base): timestamp = datetime.datetime "When the sample has been generated." + recorded_at = datetime.datetime + "When the sample has been recorded." + metadata = {wtypes.text: wtypes.text} "Arbitrary metadata associated with the sample." @@ -939,6 +946,7 @@ class Sample(_Base): resource_id=m.resource_id, source=m.source, timestamp=m.timestamp, + recorded_at=m.recorded_at, metadata=_flatten_metadata(m.resource_metadata)) @classmethod @@ -952,6 +960,7 @@ class Sample(_Base): project_id='35b17138-b364-4e6a-a131-8f3099c5be68', user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff', timestamp=timeutils.utcnow(), + recorded_at=datetime.datetime.utcnow(), source='openstack', metadata={'name1': 'value1', 'name2': 'value2'}, diff --git a/ceilometer/tests/api/v2/test_list_events_scenarios.py b/ceilometer/tests/api/v2/test_list_events_scenarios.py index 189252c60..7ed9bbb5c 100644 --- a/ceilometer/tests/api/v2/test_list_events_scenarios.py +++ b/ceilometer/tests/api/v2/test_list_events_scenarios.py @@ -24,6 +24,7 @@ import logging import testscenarios import webtest.app +from ceilometer.openstack.common import timeutils from ceilometer.publisher import utils from ceilometer import sample from ceilometer.tests.api.v2 import FunctionalTest @@ -40,6 +41,7 @@ class TestListEvents(FunctionalTest, def setUp(self): super(TestListEvents, self).setUp() + timeutils.utcnow.override_time = datetime.datetime(2014, 2, 11, 16, 42) self.sample1 = sample.Sample( 'instance', 'cumulative', @@ -85,6 +87,9 @@ class TestListEvents(FunctionalTest, def test_all(self): data = self.get_json('/meters/instance') self.assertEqual(2, len(data)) + for s in data: + self.assertEqual(s['recorded_at'], + timeutils.utcnow.override_time.isoformat()) def test_all_trailing_slash(self): data = self.get_json('/meters/instance/') diff --git a/ceilometer/tests/api/v2/test_list_meters_scenarios.py b/ceilometer/tests/api/v2/test_list_meters_scenarios.py index abf7af927..3574762b9 100644 --- a/ceilometer/tests/api/v2/test_list_meters_scenarios.py +++ b/ceilometer/tests/api/v2/test_list_meters_scenarios.py @@ -223,6 +223,7 @@ class TestListMeters(FunctionalTest, sample_id = self.messages[1]['message_id'] data = self.get_json('/samples/%s' % sample_id) self.assertIn('id', data) + del data['recorded_at'] self.assertEqual(data, { u'id': sample_id, u'metadata': {u'display_name': u'test-server', @@ -256,6 +257,7 @@ class TestListMeters(FunctionalTest, }]) self.assertIn('id', data[0]) del data[0]['id'] # Randomly generated + del data[0]['recorded_at'] self.assertEqual(data, [{ u'user_id': u'user-id4', u'resource_id': u'resource-id4',