From c45000c7594ad6fbfabf44c0615dce3021f43605 Mon Sep 17 00:00:00 2001 From: Rohit Jaiswal Date: Tue, 26 Jan 2016 08:36:43 -0800 Subject: [PATCH] Enhances client to support unique meter retrieval meter list API is enhanced to support a unique param If specified as True, it returns a unique list of meters. This patch enhances the ceilometer-client to support the unique argument in the shell and the client bindings. DocImpact Closes-Bug: #1506959 Change-Id: I011ca725c25e1cdbe9891c3719f13f5cd34142ea --- ceilometerclient/tests/unit/v2/test_shell.py | 22 +++++++++++++++++++- ceilometerclient/v2/meters.py | 11 ++++++++-- ceilometerclient/v2/shell.py | 6 +++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/ceilometerclient/tests/unit/v2/test_shell.py b/ceilometerclient/tests/unit/v2/test_shell.py index 053936bb..8f518b26 100644 --- a/ceilometerclient/tests/unit/v2/test_shell.py +++ b/ceilometerclient/tests/unit/v2/test_shell.py @@ -1846,6 +1846,7 @@ class ShellMeterListCommandTest(utils.BaseTestCase): self.cc.meters.list = mock.Mock() self.args = mock.MagicMock() self.args.limit = None + self.args.unique = False @mock.patch('sys.stdout', new=six.StringIO()) def test_meter_list(self): @@ -1853,7 +1854,26 @@ class ShellMeterListCommandTest(utils.BaseTestCase): self.cc.meters.list.return_value = [meter] ceilometer_shell.do_meter_list(self.cc, self.args) - self.cc.meters.list.assert_called_once_with(q=[], limit=None) + self.cc.meters.list.assert_called_once_with(q=[], limit=None, + unique=False) + + self.assertEqual('''\ ++-------+-------+-------+-------------+---------+------------+ +| Name | Type | Unit | Resource ID | User ID | Project ID | ++-------+-------+-------+-------------+---------+------------+ +| image | gauge | image | resource-id | | project | ++-------+-------+-------+-------------+---------+------------+ +''', sys.stdout.getvalue()) + + @mock.patch('sys.stdout', new=six.StringIO()) + def test_unique_meter_list(self): + self.args.unique = True + meter = meters.Meter(mock.Mock(), self.METER) + self.cc.meters.list.return_value = [meter] + + ceilometer_shell.do_meter_list(self.cc, self.args) + self.cc.meters.list.assert_called_once_with(q=[], limit=None, + unique=True) self.assertEqual('''\ +-------+-------+-------+-------------+---------+------------+ diff --git a/ceilometerclient/v2/meters.py b/ceilometerclient/v2/meters.py index ddb2134a..015c04c3 100644 --- a/ceilometerclient/v2/meters.py +++ b/ceilometerclient/v2/meters.py @@ -25,7 +25,14 @@ class Meter(base.Resource): class MeterManager(base.Manager): resource_class = Meter - def list(self, q=None, limit=None): + def list(self, q=None, limit=None, unique=False): path = '/v2/meters' - params = ['limit=%s' % limit] if limit else None + params = [] + + if limit: + params.append('limit=%s' % limit) + + if unique: + params.append('unique=%s' % str(unique)) + return self._list(options.build_url(path, q, params)) diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index b1f87344..95dcf11a 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -266,10 +266,14 @@ def do_sample_create(cc, args={}): 'but if supplied must be string, integer, float, or boolean.') @utils.arg('-l', '--limit', metavar='', help='Maximum number of meters to return. %s' % DEFAULT_API_LIMIT) +@utils.arg('--unique', dest='unique', + metavar='{True|False}', + type=lambda v: strutils.bool_from_string(v, True), + help='Retrieves unique list of meters.') def do_meter_list(cc, args={}): """List the user's meters.""" meters = cc.meters.list(q=options.cli_to_array(args.query), - limit=args.limit) + limit=args.limit, unique=args.unique) field_labels = ['Name', 'Type', 'Unit', 'Resource ID', 'User ID', 'Project ID'] fields = ['name', 'type', 'unit', 'resource_id', 'user_id',