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:
parent
1254809222
commit
6c2780af1e
|
@ -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}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue