From f032b7ef848d248f5917ea30a2caaa7f6d4e6822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Albert?= Date: Thu, 13 Mar 2014 12:42:06 +0100 Subject: [PATCH] Statistics groupby handling improvement The groupby parameter for statistics now handle single string as a parameter. It fixes the bug where every characters of the string where interpreted as a groupby value. Change-Id: Ia763741d7ad5717be381b0ac2f0acb57e9f46cac Closes-Bug: #1291935 --- ceilometerclient/tests/v2/test_statistics.py | 20 ++++++++++++++++++++ ceilometerclient/v2/statistics.py | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/ceilometerclient/tests/v2/test_statistics.py b/ceilometerclient/tests/v2/test_statistics.py index 68a26726..6caedf25 100644 --- a/ceilometerclient/tests/v2/test_statistics.py +++ b/ceilometerclient/tests/v2/test_statistics.py @@ -179,6 +179,26 @@ class StatisticsManagerTest(utils.BaseTestCase): self.assertEqual(stats[0].groupby.get('resource_id'), 'foo') self.assertEqual(stats[1].groupby.get('resource_id'), 'bar') + def test_list_by_meter_name_with_groupby_as_str(self): + stats = list(self.mgr.list(meter_name='instance', + q=[ + {"field": "resource_id", + "value": "foo"}, + {"field": "source", + "value": "bar"}, + ], + groupby='resource_id')) + expect = [ + ('GET', + '%s?%s%s' % (base_url, qry, groupby), {}, None), + ] + self.assertEqual(expect, self.api.calls) + self.assertEqual(2, len(stats)) + self.assertEqual(135, stats[0].count) + self.assertEqual(12, stats[1].count) + self.assertEqual('foo', stats[0].groupby.get('resource_id')) + self.assertEqual('bar', stats[1].groupby.get('resource_id')) + def test_list_by_meter_name_with_aggregates(self): aggregates = [ { diff --git a/ceilometerclient/v2/statistics.py b/ceilometerclient/v2/statistics.py index 689992c6..0d6a6d75 100644 --- a/ceilometerclient/v2/statistics.py +++ b/ceilometerclient/v2/statistics.py @@ -11,6 +11,8 @@ # License for the specific language governing permissions and limitations # under the License. +import six + from ceilometerclient.common import base from ceilometerclient.v2 import options @@ -37,6 +39,8 @@ class StatisticsManager(base.Manager): def list(self, meter_name, q=None, period=None, groupby=[], aggregates=[]): p = ['period=%s' % period] if period else [] + if isinstance(groupby, six.string_types): + groupby = [groupby] p.extend(['groupby=%s' % g for g in groupby] if groupby else []) p.extend(self._build_aggregates(aggregates)) return self._list(options.build_url(