Allowing Ceilometer to use timestamp in metriclist query

When available metric list should include the timestamp for metric
list query as well to have better performance in avg case.

Change-Id: I5200e90454c419d24f554c69bcfa3c8c97c0353d
This commit is contained in:
Atul Aggarwal 2016-03-21 11:55:47 -07:00
parent 1254809222
commit 6c2780af1e
2 changed files with 14 additions and 9 deletions

View File

@ -209,17 +209,20 @@ class Connection(base.Connection):
_search_args = dict(
start_time=start_timestamp,
end_time=end_timestamp,
limit=1)
end_time=end_timestamp
)
_search_args = {k: v for k, v in _search_args.items()
if v is not None}
result_count = 0
_search_args_metric = _search_args
_search_args_metric['dimensions'] = dims_filter
for metric in self.mc.metrics_list(
**dict(dimensions=dims_filter)):
**_search_args_metric):
_search_args['name'] = metric['name']
_search_args['dimensions'] = metric['dimensions']
_search_args['limit'] = 1
try:
for sample in self.mc.measurements_list(**_search_args):
d = sample['dimensions']
@ -369,9 +372,6 @@ class Connection(base.Connection):
_dimensions = {k: v for k, v in _dimensions.items() if v is not None}
_metric_args = dict(name=sample_filter.meter,
dimensions=_dimensions)
start_ts = timeutils.isotime(sample_filter.start_timestamp)
end_ts = timeutils.isotime(sample_filter.end_timestamp)
@ -380,14 +380,17 @@ class Connection(base.Connection):
start_timestamp_op=sample_filter.start_timestamp_op,
end_time=end_ts,
end_timestamp_op=sample_filter.end_timestamp_op,
merge_metrics=False
)
result_count = 0
_search_args_metrics = _search_args
_search_args_metrics['dimensions'] = _dimensions
_search_args_metrics['name'] = sample_filter.meter
for metric in self.mc.metrics_list(
**_metric_args):
**_search_args_metrics):
_search_args['name'] = metric['name']
_search_args['dimensions'] = metric['dimensions']
_search_args['merge_metrics'] = False
_search_args = {k: v for k, v in _search_args.items()
if v is not None}

View File

@ -58,6 +58,7 @@ class TestGetResources(base.BaseTestCase):
def test_dims_filter(self, mdf_patch):
with mock.patch("ceilometer.monasca_client.Client") as mock_client:
conn = impl_monasca.Connection("127.0.0.1:8080")
start_timestamp = timeutils.isotime(datetime.datetime(1970, 1, 1))
mnl_mock = mock_client().metrics_list
mnl_mock.return_value = [
{
@ -68,7 +69,8 @@ class TestGetResources(base.BaseTestCase):
kwargs = dict(project='proj1')
list(conn.get_resources(**kwargs))
self.assertEqual(True, mnl_mock.called)
self.assertEqual(dict(dimensions=dict(project_id='proj1')),
self.assertEqual(dict(dimensions=dict(
project_id='proj1'), start_time=start_timestamp),
mnl_mock.call_args[1])
self.assertEqual(1, mnl_mock.call_count)