Fixing ordering of 'severity' in alarms
The ordering of severity in alarms is done alphabetically. It would be more appropriate if the ordering is done based on value of severity. This patch fixes the ordering. Closes-bug: #1452254 Co-Authored-By: liusheng <liusheng@huawei.com> Change-Id: I69531e3b53a11026a35a40a415f48b7bb838010b
This commit is contained in:
parent
9010fcae9a
commit
472c2867a7
@ -16,6 +16,7 @@ import operator
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy import asc
|
||||
from sqlalchemy import desc
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy import not_
|
||||
from sqlalchemy import or_
|
||||
|
||||
@ -88,8 +89,13 @@ class QueryTransformer(object):
|
||||
for field in orderby:
|
||||
attr, order = list(field.items())[0]
|
||||
ordering_function = self.ordering_functions[order]
|
||||
self.query = self.query.order_by(ordering_function(
|
||||
getattr(self.table, attr)))
|
||||
if attr == 'severity':
|
||||
self.query = self.query.order_by(ordering_function(
|
||||
func.field(getattr(self.table, attr), 'low',
|
||||
'moderate', 'critical')))
|
||||
else:
|
||||
self.query = self.query.order_by(ordering_function(
|
||||
getattr(self.table, attr)))
|
||||
else:
|
||||
self.query = self.query.order_by(desc(self.table.timestamp))
|
||||
|
||||
|
@ -21,6 +21,7 @@ from oslo_utils import timeutils
|
||||
|
||||
from aodh.storage import models
|
||||
from aodh.tests.functional.api import v2 as tests_api
|
||||
from aodh.tests.functional import db as tests_db
|
||||
|
||||
|
||||
admin_header = {"X-Roles": "admin",
|
||||
@ -194,6 +195,28 @@ class TestQueryAlarmsController(tests_api.FunctionalTest):
|
||||
for alarm in data.json:
|
||||
self.assertEqual("alarm", alarm["state"])
|
||||
|
||||
@tests_db.run_with('mysql', 'pgsql', 'sqlite')
|
||||
def test_query_with_orderby_severity(self):
|
||||
orderby = '[{"severity": "ASC"}]'
|
||||
data = self.post_json(self.alarm_url,
|
||||
headers=admin_header,
|
||||
params={"orderby": orderby})
|
||||
alarms = list(data.json)
|
||||
severities = [a['severity'] for a in alarms]
|
||||
severity_choices = ['low', 'moderate', 'critical']
|
||||
sorted_severities = sorted(severities, key=severity_choices.index)
|
||||
self.assertEqual(sorted_severities, severities)
|
||||
|
||||
orderby = '[{"severity": "DESC"}]'
|
||||
data = self.post_json(self.alarm_url,
|
||||
headers=admin_header,
|
||||
params={"orderby": orderby})
|
||||
alarms = list(data.json)
|
||||
severities = [a['severity'] for a in alarms]
|
||||
sorted_severities = sorted(severities, key=severity_choices.index,
|
||||
reverse=True)
|
||||
self.assertEqual(sorted_severities, severities)
|
||||
|
||||
def test_limit_should_be_positive(self):
|
||||
data = self.post_json(self.alarm_url,
|
||||
headers=admin_header,
|
||||
|
Loading…
x
Reference in New Issue
Block a user