From 9c2c1e878eaa7663b50fd90f7ed5d78181840fbc Mon Sep 17 00:00:00 2001 From: Rohit Jaiswal Date: Sun, 6 Dec 2015 22:52:21 -0800 Subject: [PATCH] Handles input aggregate for statistics When statistics API is used with custom aggregates as input, there is an attribute error in client as it expects an aggregate dict in response. This adds the aggregate dict in response when input has an aggregate function. Change-Id: Ide13f5d16b6e4ef11cdcb9c98d85200efaf0cb91 --- ceilosca/ceilometer/storage/impl_monasca.py | 7 +++++++ .../ceilometer/tests/unit/storage/test_impl_monasca.py | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ceilosca/ceilometer/storage/impl_monasca.py b/ceilosca/ceilometer/storage/impl_monasca.py index 9fa5085..be5d858 100644 --- a/ceilosca/ceilometer/storage/impl_monasca.py +++ b/ceilosca/ceilometer/storage/impl_monasca.py @@ -608,6 +608,13 @@ class Connection(base.Connection): del stats_dict['timestamp'] if 'count' in stats_dict: stats_dict['count'] = int(stats_dict['count']) + if aggregate: + stats_dict['aggregate'] = {} + for a in aggregate: + key = '%s%s' % (a.func, + '/%s' % a.param if a.param else '') + stats_dict['aggregate'][key] = stats_dict.get(key) + yield api_models.Statistics( unit=stats['dimensions'].get('unit'), period=period, diff --git a/ceilosca/ceilometer/tests/unit/storage/test_impl_monasca.py b/ceilosca/ceilometer/tests/unit/storage/test_impl_monasca.py index 7e5b15d..884873b 100644 --- a/ceilosca/ceilometer/tests/unit/storage/test_impl_monasca.py +++ b/ceilosca/ceilometer/tests/unit/storage/test_impl_monasca.py @@ -22,6 +22,7 @@ from oslo_utils import timeutils from oslotest import base import ceilometer +from ceilometer.api.controllers.v2.meters import Aggregate import ceilometer.storage as storage from ceilometer.storage import impl_monasca @@ -609,9 +610,12 @@ class MeterStatisticsTest(base.BaseTestCase): sf = storage.SampleFilter() sf.meter = "image" + aggregate = Aggregate() + aggregate.func = 'min' sf.start_timestamp = timeutils.parse_isotime( '2014-10-24T12:12:42').replace(tzinfo=None) - stats = list(conn.get_meter_statistics(sf, period=30)) + stats = list(conn.get_meter_statistics(sf, aggregate=[aggregate], + period=30)) self.assertEqual(2, len(stats)) self.assertEqual('gb', stats[0].unit) @@ -623,6 +627,8 @@ class MeterStatisticsTest(base.BaseTestCase): stats[0].period_end.isoformat()) self.assertEqual('2014-10-24T12:52:42', stats[1].period_end.isoformat()) + self.assertIsNotNone(stats[0].as_dict().get('aggregate')) + self.assertEqual({u'min': 0.008}, stats[0].as_dict()['aggregate']) class CapabilitiesTest(base.BaseTestCase):