From e7df19eb61e9130f1cd87ad31bbf3f7ad1440321 Mon Sep 17 00:00:00 2001 From: liusheng Date: Tue, 23 Feb 2016 13:45:29 +0800 Subject: [PATCH] Don't support "alarm search" and mandatory --type in "alarm list" As discussed in mailing list, we agreed to drop "alarm search" command and add a --query parameter to "alarm list" to perform what "alarm search" does. And this patch will also drop mandatory --type in "alarm list", the --filter parameter will be added(in another patch). Change-Id: I68c5463fe37e3051b0e52d59f30a0eb36dd62424 --- aodhclient/shell.py | 1 - aodhclient/tests/functional/test_alarm.py | 145 ++------------------ aodhclient/tests/unit/test_alarm_manager.py | 19 +-- aodhclient/v2/alarm.py | 16 +-- aodhclient/v2/alarm_cli.py | 26 +--- 5 files changed, 17 insertions(+), 190 deletions(-) diff --git a/aodhclient/shell.py b/aodhclient/shell.py index 170a9a3..8025f9e 100644 --- a/aodhclient/shell.py +++ b/aodhclient/shell.py @@ -37,7 +37,6 @@ class AodhCommandManager(commandmanager.CommandManager): "alarm delete": alarm_cli.CliAlarmDelete, "alarm list": alarm_cli.CliAlarmList, "alarm show": alarm_cli.CliAlarmShow, - "alarm search": alarm_cli.CliAlarmSearch, "alarm update": alarm_cli.CliAlarmUpdate, "alarm-history show": alarm_history_cli.CliAlarmHistoryShow, "alarm-history search": alarm_history_cli.CliAlarmHistorySearch, diff --git a/aodhclient/tests/functional/test_alarm.py b/aodhclient/tests/functional/test_alarm.py index 0ecfeab..b22b52b 100644 --- a/aodhclient/tests/functional/test_alarm.py +++ b/aodhclient/tests/functional/test_alarm.py @@ -24,7 +24,6 @@ class AodhClientTest(base.ClientTestBase): self.aodh("help", params="alarm create") self.aodh("help", params="alarm delete") self.aodh("help", params="alarm list") - self.aodh("help", params="alarm search") self.aodh("help", params="alarm show") self.aodh("help", params="alarm update") @@ -75,7 +74,7 @@ class AodhClientTest(base.ClientTestBase): self.assertEqual('dummy', alarm_show['event_type']) # LIST - result = self.aodh('alarm', params="list --type event") + result = self.aodh('alarm', params="list") self.assertIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', @@ -85,23 +84,6 @@ class AodhClientTest(base.ClientTestBase): if alarm_list["alarm_id"] == ALARM_ID: self.assertEqual('ev_alarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh('alarm', params=("search --type event")) - self.assertIn(ALARM_ID, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == ALARM_ID: - self.assertEqual('ev_alarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh('alarm', - params=("search --type event --query " - "'{\"=\": {\"project_id\": \"%s\"}}'" - % PROJECT_ID)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(ALARM_ID, alarm_list["alarm_id"]) - self.assertEqual('ev_alarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % ALARM_ID) self.assertEqual("", result) @@ -118,7 +100,7 @@ class AodhClientTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh('alarm', params="list --type event") + result = self.aodh('alarm', params="list") self.assertNotIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) @@ -188,7 +170,7 @@ class AodhClientTest(base.ClientTestBase): self.assertEqual('10.0', alarm_show['threshold']) # LIST - result = self.aodh('alarm', params="list --type threshold") + result = self.aodh('alarm', params="list") self.assertIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', @@ -198,23 +180,6 @@ class AodhClientTest(base.ClientTestBase): if alarm_list["alarm_id"] == ALARM_ID: self.assertEqual('alarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh('alarm', params=("search --type threshold")) - self.assertIn(ALARM_ID, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == ALARM_ID: - self.assertEqual('alarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh('alarm', - params=("search --type threshold --query " - "'{\"=\": {\"project_id\": \"%s\"}}'" - % PROJECT_ID)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(ALARM_ID, alarm_list["alarm_id"]) - self.assertEqual('alarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % ALARM_ID) self.assertEqual("", result) @@ -231,7 +196,7 @@ class AodhClientTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh('alarm', params="list --type threshold") + result = self.aodh('alarm', params="list") self.assertNotIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) @@ -294,7 +259,7 @@ class AodhClientTest(base.ClientTestBase): self.assertEqual('calarm1', alarm_show['name']) # LIST - result = self.aodh('alarm', params="list --type composite") + result = self.aodh('alarm', params="list") self.assertIn(alarm_id, [r['alarm_id'] for r in self.parser.listing(result)]) output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', @@ -304,23 +269,6 @@ class AodhClientTest(base.ClientTestBase): if alarm_list["alarm_id"] == alarm_id: self.assertEqual('calarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh('alarm', params="search --type composite") - self.assertIn(alarm_id, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == alarm_id: - self.assertEqual('calarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh('alarm', - params=("search --type composite --query " - "'{\"=\": {\"project_id\": \"%s\"}}'" - % project_id)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(alarm_id, alarm_list["alarm_id"]) - self.assertEqual('calarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % alarm_id) self.assertEqual("", result) @@ -337,7 +285,7 @@ class AodhClientTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh('alarm', params="list --type composite") + result = self.aodh('alarm', params="list") self.assertNotIn(alarm_id, [r['alarm_id'] for r in self.parser.listing(result)]) @@ -418,8 +366,7 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertEqual('instance', alarm_show['resource_type']) # LIST - result = self.aodh( - 'alarm', params="list --type gnocchi_resources_threshold") + result = self.aodh('alarm', params="list") self.assertIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', @@ -429,25 +376,6 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): if alarm_list["alarm_id"] == ALARM_ID: self.assertEqual('alarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh( - 'alarm', params=("search --type gnocchi_resources_threshold")) - self.assertIn(ALARM_ID, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == ALARM_ID: - self.assertEqual('alarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh('alarm', - params=("search --type gnocchi_resources_threshold " - "--query " - "'{\"=\": {\"project_id\": \"%s\"}}'" - % PROJECT_ID)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(ALARM_ID, alarm_list["alarm_id"]) - self.assertEqual('alarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % ALARM_ID) self.assertEqual("", result) @@ -464,8 +392,7 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh('alarm', - params="list --type gnocchi_resources_threshold") + result = self.aodh('alarm', params="list") self.assertNotIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) @@ -548,9 +475,7 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertEqual('instance', alarm_show['resource_type']) # LIST - result = self.aodh( - 'alarm', params="list --type " - "gnocchi_aggregation_by_resources_threshold") + result = self.aodh('alarm', params="list") self.assertIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', @@ -560,26 +485,6 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): if alarm_list["alarm_id"] == ALARM_ID: self.assertEqual('alarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh( - 'alarm', params=("search --type " - "gnocchi_aggregation_by_resources_threshold")) - self.assertIn(ALARM_ID, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == ALARM_ID: - self.assertEqual('alarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh( - 'alarm', params=("search --type " - "gnocchi_aggregation_by_resources_threshold " - "--query '{\"=\": {\"project_id\": \"%s\"}}'" - % PROJECT_ID)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(ALARM_ID, alarm_list["alarm_id"]) - self.assertEqual('alarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % ALARM_ID) self.assertEqual("", result) @@ -596,8 +501,7 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh('alarm', params="list --type " - "gnocchi_aggregation_by_resources_threshold") + result = self.aodh('alarm', params="list") self.assertNotIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) @@ -678,36 +582,13 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertEqual('last', alarm_show['aggregation_method']) # LIST - result = self.aodh( - 'alarm', params="list --type " - "gnocchi_aggregation_by_metrics_threshold") + result = self.aodh('alarm', params="list") self.assertIn(ALARM_ID, [r['alarm_id'] for r in self.parser.listing(result)]) for alarm_list in self.parser.listing(result): if alarm_list["alarm_id"] == ALARM_ID: self.assertEqual('alarm1', alarm_list['name']) - # SEARCH ALL - result = self.aodh( - 'alarm', params=("search --type " - "gnocchi_aggregation_by_metrics_threshold")) - self.assertIn(ALARM_ID, - [r['alarm_id'] for r in self.parser.listing(result)]) - for alarm_list in self.parser.listing(result): - if alarm_list["alarm_id"] == ALARM_ID: - self.assertEqual('alarm1', alarm_list['name']) - - # SEARCH SOME - result = self.aodh( - 'alarm', - params=("search --type " - "gnocchi_aggregation_by_metrics_threshold " - "--query '{\"=\": {\"project_id\": \"%s\"}}'" - % PROJECT_ID)) - alarm_list = self.parser.listing(result)[0] - self.assertEqual(ALARM_ID, alarm_list["alarm_id"]) - self.assertEqual('alarm1', alarm_list['name']) - # DELETE result = self.aodh('alarm', params="delete %s" % ALARM_ID) self.assertEqual("", result) @@ -725,9 +606,7 @@ class AodhClientGnocchiRulesTest(base.ClientTestBase): self.assertFirstLineStartsWith(result.split('\n'), expected) # LIST DOES NOT HAVE ALARM - result = self.aodh( - 'alarm', params="list --type " - "gnocchi_aggregation_by_metrics_threshold") + result = self.aodh('alarm', params="list") output_colums = ['alarm_id', 'type', 'name', 'state', 'severity', 'enabled'] for alarm_list in self.parser.listing(result): diff --git a/aodhclient/tests/unit/test_alarm_manager.py b/aodhclient/tests/unit/test_alarm_manager.py index 48d26c3..331aa02 100644 --- a/aodhclient/tests/unit/test_alarm_manager.py +++ b/aodhclient/tests/unit/test_alarm_manager.py @@ -43,9 +43,8 @@ class AlarmManagerTest(testtools.TestCase): @mock.patch.object(alarm.AlarmManager, '_get') def test_list(self, mock_am): am = alarm.AlarmManager(self.client) - am.list('event') - mock_am.assert_called_with( - 'v2/alarms?q.field=type&q.op=eq&q.value=event') + am.list() + mock_am.assert_called_with('v2/alarms') @mock.patch.object(alarm.AlarmManager, '_get') def test_get(self, mock_am): @@ -69,17 +68,3 @@ class AlarmManagerTest(testtools.TestCase): alarm_value.pop('name') result = self.results.get("result1") self.assertEqual(alarm_value, result) - - @mock.patch.object(alarm.AlarmManager, '_post') - def test_search(self, mock_am): - am = alarm.AlarmManager(self.client) - query = '{"=": {"type": "event"}}' - am.search(query) - url = 'v2/query/alarms' - expected_value = ('{"filter": "{\\"=\\": {\\"type\\":' - ' \\"event\\"}}"}') - headers_value = {'Content-Type': "application/json"} - mock_am.assert_called_with( - url, - data=expected_value, - headers=headers_value) diff --git a/aodhclient/v2/alarm.py b/aodhclient/v2/alarm.py index a18713a..9fd0196 100644 --- a/aodhclient/v2/alarm.py +++ b/aodhclient/v2/alarm.py @@ -21,10 +21,9 @@ class AlarmManager(base.Manager): url = "v2/alarms" - def list(self, alarm_type): + def list(self): """List alarms""" - return self._get(self.url + '?q.field=type&q.op=eq' + - '&q.value=' + alarm_type).json() + return self._get(self.url).json() def get(self, alarm_id): """Get an alarm @@ -101,14 +100,3 @@ class AlarmManager(base.Manager): :type alarm_id: str """ self._delete(self.url + '/' + alarm_id) - - def search(self, query=None): - """List alarms - - :param query: The query dictionary - :type query: dict - """ - query = {'filter': query} if query else {} - url = "v2/query/alarms" - return self._post(url, headers={'Content-Type': "application/json"}, - data=jsonutils.dumps(query)).json() diff --git a/aodhclient/v2/alarm_cli.py b/aodhclient/v2/alarm_cli.py index 102927c..94ff92f 100644 --- a/aodhclient/v2/alarm_cli.py +++ b/aodhclient/v2/alarm_cli.py @@ -36,32 +36,8 @@ ALARM_LIST_COLS = ['alarm_id', 'type', 'name', 'state', 'severity', 'enabled'] class CliAlarmList(lister.Lister): """List alarms""" - def get_parser(self, prog_name): - parser = super(CliAlarmList, self).get_parser(prog_name) - parser.add_argument('-t', '--type', required=True, - choices=ALARM_TYPES, help='Type of alarm') - return parser - def take_action(self, parsed_args): - alarms = self.app.client.alarm.list(alarm_type=parsed_args.type) - return utils.list2cols(ALARM_LIST_COLS, alarms) - - -class CliAlarmSearch(CliAlarmList): - """Search alarms with specified query rules""" - - def get_parser(self, prog_name): - parser = super(CliAlarmSearch, self).get_parser(prog_name) - parser.add_argument("--query", help="Query"), - return parser - - def take_action(self, parsed_args): - type_query = '{"=": {"type": "%s"}}' % parsed_args.type - if parsed_args.query: - query = '{"and": [%s, %s]}' % (type_query, parsed_args.query) - else: - query = type_query - alarms = self.app.client.alarm.search(query=query) + alarms = self.app.client.alarm.list() return utils.list2cols(ALARM_LIST_COLS, alarms)