summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-04-12 05:00:10 +0000
committerGerrit Code Review <review@openstack.org>2014-04-12 05:00:10 +0000
commite56da49b60eda53b743f1f5391a323e4e2f0fcfe (patch)
treee9458cacef707496f00ff2be744f02671b3334eb
parentdefbb95855443047c3fb0a90ca4a9c9d1a51180b (diff)
parentf032b7ef848d248f5917ea30a2caaa7f6d4e6822 (diff)
downloadpython-ceilometerclient-e56da49b60eda53b743f1f5391a323e4e2f0fcfe.tar.gz
Merge "Statistics groupby handling improvement"
-rw-r--r--ceilometerclient/tests/v2/test_statistics.py20
-rw-r--r--ceilometerclient/v2/statistics.py4
2 files changed, 24 insertions, 0 deletions
diff --git a/ceilometerclient/tests/v2/test_statistics.py b/ceilometerclient/tests/v2/test_statistics.py
index dde4dd6..ed3465c 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 d0b56c9..e8c92e8 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
@@ -43,6 +45,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(