summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStéphane Albert <stephane.albert@objectif-libre.com>2014-03-13 12:42:06 +0100
committerStéphane Albert <stephane.albert@objectif-libre.com>2014-03-28 13:46:30 +0100
commitf032b7ef848d248f5917ea30a2caaa7f6d4e6822 (patch)
treec3bc4a822acd9f5bf1d140b91749fccf48ef4174
parentfcfffacd3b13ca295a7f2ba42176f4212c1c96fb (diff)
downloadpython-ceilometerclient-f032b7ef848d248f5917ea30a2caaa7f6d4e6822.tar.gz
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
-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 68a2672..6caedf2 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 689992c..0d6a6d7 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(