Merge "Adding alarm list filtering by state and meter"

This commit is contained in:
Jenkins
2014-06-12 22:28:32 +00:00
committed by Gerrit Code Review
6 changed files with 67 additions and 7 deletions

View File

@@ -231,7 +231,7 @@ class Connection(object):
raise NotImplementedError('Statistics not implemented')
@staticmethod
def get_alarms(name=None, user=None,
def get_alarms(name=None, user=None, state=None, meter=None,
project=None, enabled=None, alarm_id=None, pagination=None):
"""Yields a lists of alarms that match filters."""
raise NotImplementedError('Alarms not implemented')

View File

@@ -248,14 +248,16 @@ class Connection(base.Connection):
alarm_table = conn.table(self.ALARM_TABLE)
alarm_table.delete(alarm_id)
def get_alarms(self, name=None, user=None,
def get_alarms(self, name=None, user=None, state=None, meter=None,
project=None, enabled=None, alarm_id=None, pagination=None):
if pagination:
raise NotImplementedError('Pagination not implemented')
if meter:
raise NotImplementedError('Filter by meter not implemented')
q = make_query(alarm_id=alarm_id, name=name, enabled=enabled,
user_id=user, project_id=project)
user_id=user, project_id=project, state=state)
with self.conn_pool.connection() as conn:
alarm_table = conn.table(self.ALARM_TABLE)

View File

@@ -132,7 +132,7 @@ class Connection(base.Connection):
"""
return []
def get_alarms(self, name=None, user=None,
def get_alarms(self, name=None, user=None, state=None, meter=None,
project=None, enabled=None, alarm_id=None, pagination=None):
"""Yields a lists of alarms that match filters
"""

View File

@@ -685,10 +685,12 @@ class Connection(base.Connection):
def _retrieve_alarms(self, query):
return (self._row_to_alarm_model(x) for x in query.all())
def get_alarms(self, name=None, user=None,
def get_alarms(self, name=None, user=None, state=None, meter=None,
project=None, enabled=None, alarm_id=None, pagination=None):
"""Yields a lists of alarms that match filters
:param user: Optional ID for user that owns the resource.
:param state: Optional string for alarm state.
:param meter: Optional string for alarms associated with meter.
:param project: Optional ID for project that owns the resource.
:param enabled: Optional boolean to list disable alarm.
:param alarm_id: Optional alarm_id to return one alarm.
@@ -710,8 +712,18 @@ class Connection(base.Connection):
query = query.filter(models.Alarm.project_id == project)
if alarm_id is not None:
query = query.filter(models.Alarm.alarm_id == alarm_id)
if state is not None:
query = query.filter(models.Alarm.state == state)
return self._retrieve_alarms(query)
alarms = self._retrieve_alarms(query)
# TODO(cmart): improve this by using sqlalchemy.func factory
if meter is not None:
alarms = filter(lambda row:
row.rule.get('meter_name', None) == meter,
alarms)
return alarms
def create_alarm(self, alarm):
"""Create an alarm.

View File

@@ -269,11 +269,13 @@ class Connection(base.Connection):
[("timestamp", pymongo.DESCENDING)],
limit)
def get_alarms(self, name=None, user=None,
def get_alarms(self, name=None, user=None, state=None, meter=None,
project=None, enabled=None, alarm_id=None, pagination=None):
"""Yields a lists of alarms that match filters
:param name: The Alarm name.
:param user: Optional ID for user that owns the resource.
:param state: Optional string for alarm state.
:param meter: Optional string for alarms associated with meter.
:param project: Optional ID for project that owns the resource.
:param enabled: Optional boolean to list disable alarm.
:param alarm_id: Optional alarm_id to return one alarm.
@@ -293,6 +295,10 @@ class Connection(base.Connection):
q['enabled'] = enabled
if alarm_id is not None:
q['alarm_id'] = alarm_id
if state is not None:
q['state'] = state
if meter is not None:
q['rule.meter_name'] = meter
return self._retrieve_alarms(q, [], None)