Merge "Fix the developer documentation of the alarm API"
This commit is contained in:
commit
f5ef8095bd
@ -64,6 +64,7 @@ ALARM_API_OPTS = [
|
|||||||
cfg.CONF.register_opts(ALARM_API_OPTS, group='alarm')
|
cfg.CONF.register_opts(ALARM_API_OPTS, group='alarm')
|
||||||
|
|
||||||
state_kind = ["ok", "alarm", "insufficient data"]
|
state_kind = ["ok", "alarm", "insufficient data"]
|
||||||
|
state_kind_enum = wtypes.Enum(str, *state_kind)
|
||||||
operation_kind = wtypes.Enum(str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt')
|
operation_kind = wtypes.Enum(str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt')
|
||||||
|
|
||||||
|
|
||||||
@ -78,12 +79,20 @@ class EntityNotFound(Exception):
|
|||||||
|
|
||||||
class BoundedInt(wtypes.UserType):
|
class BoundedInt(wtypes.UserType):
|
||||||
basetype = int
|
basetype = int
|
||||||
name = 'bounded int'
|
|
||||||
|
|
||||||
def __init__(self, min=None, max=None):
|
def __init__(self, min=None, max=None):
|
||||||
self.min = min
|
self.min = min
|
||||||
self.max = max
|
self.max = max
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
if self.min is not None and self.max is not None:
|
||||||
|
return 'int between %d and %d' % (self.min, self.max)
|
||||||
|
elif self.min is not None:
|
||||||
|
return 'int greater than %d' % self.min
|
||||||
|
else:
|
||||||
|
return 'int lower than %d' % self.max
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def frombasetype(value):
|
def frombasetype(value):
|
||||||
return int(value) if value is not None else None
|
return int(value) if value is not None else None
|
||||||
@ -1068,6 +1077,9 @@ class AlarmCombinationRule(_Base):
|
|||||||
|
|
||||||
class Alarm(_Base):
|
class Alarm(_Base):
|
||||||
"""Representation of an alarm.
|
"""Representation of an alarm.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
combination_rule and threshold_rule are mutually exclusive.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
alarm_id = wtypes.text
|
alarm_id = wtypes.text
|
||||||
@ -1302,14 +1314,18 @@ class AlarmController(rest.RestController):
|
|||||||
payload['detail'] = scrubbed_data
|
payload['detail'] = scrubbed_data
|
||||||
_send_notification(type, payload)
|
_send_notification(type, payload)
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(Alarm, wtypes.text)
|
@wsme_pecan.wsexpose(Alarm)
|
||||||
def get(self):
|
def get(self):
|
||||||
"""Return this alarm."""
|
"""Return this alarm.
|
||||||
|
"""
|
||||||
return Alarm.from_db_model(self._alarm())
|
return Alarm.from_db_model(self._alarm())
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(Alarm, wtypes.text, body=Alarm)
|
@wsme_pecan.wsexpose(Alarm, body=Alarm)
|
||||||
def put(self, data):
|
def put(self, data):
|
||||||
"""Modify this alarm."""
|
"""Modify this alarm.
|
||||||
|
|
||||||
|
:param data: a alarm within the request body.
|
||||||
|
"""
|
||||||
# Ensure alarm exists
|
# Ensure alarm exists
|
||||||
alarm_in = self._alarm()
|
alarm_in = self._alarm()
|
||||||
|
|
||||||
@ -1349,9 +1365,10 @@ class AlarmController(rest.RestController):
|
|||||||
self._record_change(change, now, on_behalf_of=alarm.project_id)
|
self._record_change(change, now, on_behalf_of=alarm.project_id)
|
||||||
return Alarm.from_db_model(alarm)
|
return Alarm.from_db_model(alarm)
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(None, wtypes.text, status_code=204)
|
@wsme_pecan.wsexpose(None, status_code=204)
|
||||||
def delete(self):
|
def delete(self):
|
||||||
"""Delete this alarm."""
|
"""Delete this alarm.
|
||||||
|
"""
|
||||||
# ensure alarm exists before deleting
|
# ensure alarm exists before deleting
|
||||||
alarm = self._alarm()
|
alarm = self._alarm()
|
||||||
self.conn.delete_alarm(alarm.alarm_id)
|
self.conn.delete_alarm(alarm.alarm_id)
|
||||||
@ -1378,13 +1395,20 @@ class AlarmController(rest.RestController):
|
|||||||
for ac in conn.get_alarm_changes(self._id, auth_project,
|
for ac in conn.get_alarm_changes(self._id, auth_project,
|
||||||
**kwargs)]
|
**kwargs)]
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(wtypes.text, body=wtypes.text)
|
@wsme.validate(state_kind_enum)
|
||||||
|
@wsme_pecan.wsexpose(state_kind_enum, body=state_kind_enum)
|
||||||
def put_state(self, state):
|
def put_state(self, state):
|
||||||
"""Set the state of this alarm."""
|
"""Set the state of this alarm.
|
||||||
|
|
||||||
|
:param state: a alarm state within the request body.
|
||||||
|
"""
|
||||||
|
# note(sileht): body are not validated by wsme
|
||||||
|
# Workaround for https://bugs.launchpad.net/wsme/+bug/1227229
|
||||||
if state not in state_kind:
|
if state not in state_kind:
|
||||||
error = _("state invalid")
|
error = _("state invalid")
|
||||||
pecan.response.translatable_error = error
|
pecan.response.translatable_error = error
|
||||||
raise wsme.exc.ClientSideError(unicode(error))
|
raise wsme.exc.ClientSideError(unicode(error))
|
||||||
|
|
||||||
now = timeutils.utcnow()
|
now = timeutils.utcnow()
|
||||||
alarm = self._alarm()
|
alarm = self._alarm()
|
||||||
alarm.state = state
|
alarm.state = state
|
||||||
@ -1395,8 +1419,10 @@ class AlarmController(rest.RestController):
|
|||||||
type=storage.models.AlarmChange.STATE_TRANSITION)
|
type=storage.models.AlarmChange.STATE_TRANSITION)
|
||||||
return alarm.state
|
return alarm.state
|
||||||
|
|
||||||
@wsme_pecan.wsexpose(wtypes.text)
|
@wsme_pecan.wsexpose(state_kind_enum)
|
||||||
def get_state(self):
|
def get_state(self):
|
||||||
|
"""Get the state of this alarm.
|
||||||
|
"""
|
||||||
alarm = self._alarm()
|
alarm = self._alarm()
|
||||||
return alarm.state
|
return alarm.state
|
||||||
|
|
||||||
@ -1439,7 +1465,10 @@ class AlarmsController(rest.RestController):
|
|||||||
|
|
||||||
@wsme_pecan.wsexpose(Alarm, body=Alarm, status_code=201)
|
@wsme_pecan.wsexpose(Alarm, body=Alarm, status_code=201)
|
||||||
def post(self, data):
|
def post(self, data):
|
||||||
"""Create a new alarm."""
|
"""Create a new alarm.
|
||||||
|
|
||||||
|
:param data: a alarm within the request body.
|
||||||
|
"""
|
||||||
conn = pecan.request.storage_conn
|
conn = pecan.request.storage_conn
|
||||||
now = timeutils.utcnow()
|
now = timeutils.utcnow()
|
||||||
|
|
||||||
|
@ -40,9 +40,17 @@ Alarms
|
|||||||
.. rest-controller:: ceilometer.api.controllers.v2:AlarmsController
|
.. rest-controller:: ceilometer.api.controllers.v2:AlarmsController
|
||||||
:webprefix: /v2/alarms
|
:webprefix: /v2/alarms
|
||||||
|
|
||||||
|
.. rest-controller:: ceilometer.api.controllers.v2:AlarmController
|
||||||
|
:webprefix: /v2/alarms
|
||||||
|
|
||||||
.. autotype:: ceilometer.api.controllers.v2.Alarm
|
.. autotype:: ceilometer.api.controllers.v2.Alarm
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
.. autotype:: ceilometer.api.controllers.v2.AlarmThresholdRule
|
||||||
|
:members:
|
||||||
|
|
||||||
|
.. autotype:: ceilometer.api.controllers.v2.AlarmCombinationRule
|
||||||
|
:members:
|
||||||
|
|
||||||
Filtering Queries
|
Filtering Queries
|
||||||
=================
|
=================
|
||||||
|
Loading…
Reference in New Issue
Block a user