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
This commit is contained in:
liusheng
2016-02-23 13:45:29 +08:00
parent 03e7a45e5e
commit e7df19eb61
5 changed files with 17 additions and 190 deletions

View File

@@ -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,

View File

@@ -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):

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)