Jump to: navigation, search

Difference between revisions of "Ceilometer/blueprints/alarm-api"

(Updated)
(Updated)
Line 119: Line 119:
  
 
== Updated ==
 
== Updated ==
 +
 +
=== Data Structures ===
  
 
  <nowiki>
 
  <nowiki>
 
 
alarm_state = wtypes.Enum(wtypes.text, 'ok', 'alarm', 'insufficient_data')
 
alarm_state = wtypes.Enum(wtypes.text, 'ok', 'alarm', 'insufficient_data')
 +
</nowiki>
  
 +
<nowiki>
 
class AlarmAction(_Base):
 
class AlarmAction(_Base):
 
   """Action to take when alarm changes state.
 
   """Action to take when alarm changes state.
Line 133: Line 136:
 
   url = wtypes.text
 
   url = wtypes.text
 
   "The URL to visit when the alarm state is reached"
 
   "The URL to visit when the alarm state is reached"
 +
</nowiki>
  
 +
<nowiki>
 
class ThresholdRule(_Base):
 
class ThresholdRule(_Base):
  
Line 153: Line 158:
 
     evaluation_periods = int
 
     evaluation_periods = int
 
     "The number of historical periods to evaluate the threshold"
 
     "The number of historical periods to evaluate the threshold"
 +
</nowiki>
  
 
+
<nowiki>
 
class CombinationRule(_Base):
 
class CombinationRule(_Base):
  
Line 162: Line 168:
 
   alarm_ids = [wtypes.text]
 
   alarm_ids = [wtypes.text]
 
   "List of alarm identifiers to combine"
 
   "List of alarm identifiers to combine"
 +
</nowiki>
  
 +
<nowiki>
 
class Alarm(_Base):
 
class Alarm(_Base):
 
     """Representation of an alarm.
 
     """Representation of an alarm.
Line 190: Line 198:
 
     combination_rule = CombinationRule
 
     combination_rule = CombinationRule
 
     "If set, this alarm will be evaluated based on combining the settings of the specified alarms"
 
     "If set, this alarm will be evaluated based on combining the settings of the specified alarms"
 +
</nowiki>
  
 
+
<nowiki>
 
class AlarmStatus(_Base):
 
class AlarmStatus(_Base):
  
Line 208: Line 217:
 
     state_timestamp = datetime.datetime
 
     state_timestamp = datetime.datetime
 
     "The date of the last alarm state changed"
 
     "The date of the last alarm state changed"
 
 
</nowiki>
 
</nowiki>

Revision as of 13:54, 5 September 2013

Original

AlarmController

class AlarmController(rest.RestController):
    """Manages operations on a single alarm.
    """

    @wsme_pecan.wsexpose(Alarm, wtypes.text)
    def get(self):
        """Return this alarm."""

    @wsme.validate(Alarm)
    @wsme_pecan.wsexpose(Alarm, wtypes.text, body=Alarm)
    def put(self, data):
        """Modify this alarm."""

    @wsme_pecan.wsexpose(None, wtypes.text, status_code=204)
    def delete(self):
        """Delete this alarm."""

    # TODO(eglynn): add pagination marker to signature once overall
    #               API support for pagination is finalized
    @wsme_pecan.wsexpose([AlarmChange], [Query])
    def history(self, q=[]):
        """Assembles the alarm history requested.

        :param q: Filter rules for the changes to be described.
        """

AlarmsController

class AlarmsController(rest.RestController):
    """Manages operations on the alarms collection.
    """

    @wsme.validate(Alarm)
    @wsme_pecan.wsexpose(Alarm, body=Alarm, status_code=201)
    def post(self, data):
        """Create a new alarm."""

    @wsme_pecan.wsexpose([Alarm], [Query])
    def get_all(self, q=[]):
        """Return all alarms, based on the query provided.

        :param q: Filter rules for the alarms to be returned.
        """

Alarm class

class Alarm(_Base):
    """Representation of an alarm.
    """

    alarm_id = wtypes.text
    "The UUID of the alarm"

    name = wtypes.text
    "The name for the alarm"

    description = wtypes.text
    "The description of the alarm"

    meter_name = wtypes.text
    "The name of meter"

    project_id = wtypes.text
    "The ID of the project or tenant that owns the alarm"

    user_id = wtypes.text
    "The ID of the user who created the alarm"

    comparison_operator = wtypes.Enum(str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt')
    "The comparison against the alarm threshold"

    threshold = float
    "The threshold of the alarm"

    statistic = wtypes.Enum(str, 'max', 'min', 'avg', 'sum', 'count')
    "The statistic to compare to the threshold"

    enabled = bool
    "This alarm is enabled?"

    evaluation_periods = int
    "The number of periods to evaluate the threshold"

    period = int
    "The time range in seconds over which to evaluate the threshold"

    timestamp = datetime.datetime
    "The date of the last alarm definition update"

    state = wtypes.Enum(str, 'ok', 'alarm', 'insufficient data')
    "The state offset the alarm"

    state_timestamp = datetime.datetime
    "The date of the last alarm state changed"

    ok_actions = [wtypes.text]
    "The actions to do when alarm state change to ok"

    alarm_actions = [wtypes.text]
    "The actions to do when alarm state change to alarm"

    insufficient_data_actions = [wtypes.text]
    "The actions to do when alarm state change to insufficient data"

    repeat_actions = bool
    "The actions should be re-triggered on each evaluation cycle"

    matching_metadata = {wtypes.text: wtypes.text}
    "The matching_metadata of the alarm"

Updated

Data Structures

alarm_state = wtypes.Enum(wtypes.text, 'ok', 'alarm', 'insufficient_data')

class AlarmAction(_Base):
   """Action to take when alarm changes state.
   """

  state = alarm_state
  "The state for which the action applies."

  url = wtypes.text
  "The URL to visit when the alarm state is reached"

class ThresholdRule(_Base):

    query = [Query]
    "The query to find the data for computing statistics, including meter_name"

    period = int
    "The time range in seconds over which query"

    comparison_operator = wtypes.Enum(str, 'lt', 'le', 'eq', 'ne', 'ge', 'gt')
    "The comparison against the alarm threshold"

    threshold = float
    "The threshold of the alarm"

    statistic = wtypes.Enum(str, 'max', 'min', 'avg', 'sum', 'count')
    "The statistic to compare to the threshold"

    evaluation_periods = int
    "The number of historical periods to evaluate the threshold"

class CombinationRule(_Base):

    operator = wtypes.Enum(str, 'or', 'and')
    "How to combine the sub-alarms"

   alarm_ids = [wtypes.text]
   "List of alarm identifiers to combine"

class Alarm(_Base):
    """Representation of an alarm.
    """

    alarm_id = wtypes.text
    "The UUID of the alarm"

    name = wtypes.text
    "The name for the alarm"

    description = wtypes.text
    "The description of the alarm"

    enabled = bool
    "This alarm is enabled?"

    actions = [AlarmAction]
    "The actions to take when the alarm state changes"

    repeat_actions = bool
    "The actions should be re-triggered on each evaluation cycle"

    threshold_rule = ThresholdRule
    "If set, this alarm will be evaluated based on the threshold specification"

    combination_rule = CombinationRule
    "If set, this alarm will be evaluated based on combining the settings of the specified alarms"

class AlarmStatus(_Base):

    timestamp = datetime.datetime
    "The date of the last alarm definition update"

    state = alarm_states
    "The state offset the alarm"

    project_id = wtypes.text
    "The ID of the project or tenant that owns the alarm"

    user_id = wtypes.text
    "The ID of the user who created the alarm"

    state_timestamp = datetime.datetime
    "The date of the last alarm state changed"