api: export recorded_at in returned samples
Change-Id: I970bc82d70fd75cbb25ea6c7e0778521aaa9b255 Blueprint: storage-sample-timestamp
This commit is contained in:
@@ -569,6 +569,9 @@ class OldSample(_Base):
|
|||||||
timestamp = datetime.datetime
|
timestamp = datetime.datetime
|
||||||
"UTC date and time when the measurement was made"
|
"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}
|
resource_metadata = {wtypes.text: wtypes.text}
|
||||||
"Arbitrary metadata associated with the resource"
|
"Arbitrary metadata associated with the resource"
|
||||||
|
|
||||||
@@ -601,6 +604,7 @@ class OldSample(_Base):
|
|||||||
resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36',
|
resource_id='bd9431c1-8d69-4ad3-803a-8d4a6b89fd36',
|
||||||
project_id='35b17138-b364-4e6a-a131-8f3099c5be68',
|
project_id='35b17138-b364-4e6a-a131-8f3099c5be68',
|
||||||
user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff',
|
user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff',
|
||||||
|
recorded_at=datetime.datetime.utcnow(),
|
||||||
timestamp=datetime.datetime.utcnow(),
|
timestamp=datetime.datetime.utcnow(),
|
||||||
resource_metadata={'name1': 'value1',
|
resource_metadata={'name1': 'value1',
|
||||||
'name2': 'value2'},
|
'name2': 'value2'},
|
||||||
@@ -924,6 +928,9 @@ class Sample(_Base):
|
|||||||
timestamp = datetime.datetime
|
timestamp = datetime.datetime
|
||||||
"When the sample has been generated."
|
"When the sample has been generated."
|
||||||
|
|
||||||
|
recorded_at = datetime.datetime
|
||||||
|
"When the sample has been recorded."
|
||||||
|
|
||||||
metadata = {wtypes.text: wtypes.text}
|
metadata = {wtypes.text: wtypes.text}
|
||||||
"Arbitrary metadata associated with the sample."
|
"Arbitrary metadata associated with the sample."
|
||||||
|
|
||||||
@@ -939,6 +946,7 @@ class Sample(_Base):
|
|||||||
resource_id=m.resource_id,
|
resource_id=m.resource_id,
|
||||||
source=m.source,
|
source=m.source,
|
||||||
timestamp=m.timestamp,
|
timestamp=m.timestamp,
|
||||||
|
recorded_at=m.recorded_at,
|
||||||
metadata=_flatten_metadata(m.resource_metadata))
|
metadata=_flatten_metadata(m.resource_metadata))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -952,6 +960,7 @@ class Sample(_Base):
|
|||||||
project_id='35b17138-b364-4e6a-a131-8f3099c5be68',
|
project_id='35b17138-b364-4e6a-a131-8f3099c5be68',
|
||||||
user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff',
|
user_id='efd87807-12d2-4b38-9c70-5f5c2ac427ff',
|
||||||
timestamp=timeutils.utcnow(),
|
timestamp=timeutils.utcnow(),
|
||||||
|
recorded_at=datetime.datetime.utcnow(),
|
||||||
source='openstack',
|
source='openstack',
|
||||||
metadata={'name1': 'value1',
|
metadata={'name1': 'value1',
|
||||||
'name2': 'value2'},
|
'name2': 'value2'},
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import logging
|
|||||||
import testscenarios
|
import testscenarios
|
||||||
import webtest.app
|
import webtest.app
|
||||||
|
|
||||||
|
from ceilometer.openstack.common import timeutils
|
||||||
from ceilometer.publisher import utils
|
from ceilometer.publisher import utils
|
||||||
from ceilometer import sample
|
from ceilometer import sample
|
||||||
from ceilometer.tests.api.v2 import FunctionalTest
|
from ceilometer.tests.api.v2 import FunctionalTest
|
||||||
@@ -40,6 +41,7 @@ class TestListEvents(FunctionalTest,
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestListEvents, self).setUp()
|
super(TestListEvents, self).setUp()
|
||||||
|
timeutils.utcnow.override_time = datetime.datetime(2014, 2, 11, 16, 42)
|
||||||
self.sample1 = sample.Sample(
|
self.sample1 = sample.Sample(
|
||||||
'instance',
|
'instance',
|
||||||
'cumulative',
|
'cumulative',
|
||||||
@@ -85,6 +87,9 @@ class TestListEvents(FunctionalTest,
|
|||||||
def test_all(self):
|
def test_all(self):
|
||||||
data = self.get_json('/meters/instance')
|
data = self.get_json('/meters/instance')
|
||||||
self.assertEqual(2, len(data))
|
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):
|
def test_all_trailing_slash(self):
|
||||||
data = self.get_json('/meters/instance/')
|
data = self.get_json('/meters/instance/')
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ class TestListMeters(FunctionalTest,
|
|||||||
sample_id = self.messages[1]['message_id']
|
sample_id = self.messages[1]['message_id']
|
||||||
data = self.get_json('/samples/%s' % sample_id)
|
data = self.get_json('/samples/%s' % sample_id)
|
||||||
self.assertIn('id', data)
|
self.assertIn('id', data)
|
||||||
|
del data['recorded_at']
|
||||||
self.assertEqual(data, {
|
self.assertEqual(data, {
|
||||||
u'id': sample_id,
|
u'id': sample_id,
|
||||||
u'metadata': {u'display_name': u'test-server',
|
u'metadata': {u'display_name': u'test-server',
|
||||||
@@ -256,6 +257,7 @@ class TestListMeters(FunctionalTest,
|
|||||||
}])
|
}])
|
||||||
self.assertIn('id', data[0])
|
self.assertIn('id', data[0])
|
||||||
del data[0]['id'] # Randomly generated
|
del data[0]['id'] # Randomly generated
|
||||||
|
del data[0]['recorded_at']
|
||||||
self.assertEqual(data, [{
|
self.assertEqual(data, [{
|
||||||
u'user_id': u'user-id4',
|
u'user_id': u'user-id4',
|
||||||
u'resource_id': u'resource-id4',
|
u'resource_id': u'resource-id4',
|
||||||
|
|||||||
Reference in New Issue
Block a user