Adding Ceilometer Alarm API
- Adding basic alarm-api function wrappers - Adding Alarm class wrapper - Added Test Cases for the wrapper DocImpact Implements: blueprint ceilometer-alarm-api Change-Id: I569b461e86197b77d13e7cbef27b0ac4bea03b82 Co-Authored-By: Sanjana Pai <sanjana@hitachi.co.in>
This commit is contained in:

committed by
sanjana

parent
09a37991f7
commit
7df3624c58
@@ -267,6 +267,41 @@ class Statistic(base.APIResourceWrapper):
|
|||||||
'duration', 'duration_start', 'duration_end']
|
'duration', 'duration_start', 'duration_end']
|
||||||
|
|
||||||
|
|
||||||
|
class Alarm(base.APIResourceWrapper):
|
||||||
|
"""Represents one Ceilometer alarm."""
|
||||||
|
_attrs = ['alarm_actions', 'ok_actions', 'name',
|
||||||
|
'timestamp', 'description', 'time_constraints',
|
||||||
|
'enabled', 'state_timestamp', 'alarm_id',
|
||||||
|
'state', 'insufficient_data_actions',
|
||||||
|
'repeat_actions', 'user_id', 'project_id',
|
||||||
|
'type', 'severity', 'threshold_rule', 'period', 'query',
|
||||||
|
'evaluation_periods', 'statistic', 'meter_name',
|
||||||
|
'threshold', 'comparison_operator', 'exclude_outliers']
|
||||||
|
|
||||||
|
def __init__(self, apiresource, ceilometer_usage=None):
|
||||||
|
super(Alarm, self).__init__(apiresource)
|
||||||
|
self._tenant = None
|
||||||
|
self._user = None
|
||||||
|
|
||||||
|
if ceilometer_usage and self.project_id:
|
||||||
|
self._tenant = ceilometer_usage.get_tenant(self.project_id)
|
||||||
|
|
||||||
|
if ceilometer_usage and self.user_id:
|
||||||
|
self._user = ceilometer_usage.get_user(self.user_id)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return self.alarm_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def tenant(self):
|
||||||
|
return self._tenant
|
||||||
|
|
||||||
|
@property
|
||||||
|
def user(self):
|
||||||
|
return self._user
|
||||||
|
|
||||||
|
|
||||||
@memoized
|
@memoized
|
||||||
def ceilometerclient(request):
|
def ceilometerclient(request):
|
||||||
"""Initialization of Ceilometer client."""
|
"""Initialization of Ceilometer client."""
|
||||||
@@ -280,6 +315,35 @@ def ceilometerclient(request):
|
|||||||
cacert=cacert)
|
cacert=cacert)
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_list(request, query=None, ceilometer_usage=None):
|
||||||
|
"""List alarms."""
|
||||||
|
alarms = ceilometerclient(request).alarms.list(q=query)
|
||||||
|
return [Alarm(alarm, ceilometer_usage) for alarm in alarms]
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_get(request, alarm_id, ceilometer_usage=None):
|
||||||
|
"""Get an alarm."""
|
||||||
|
alarm = ceilometerclient(request).alarms.get(alarm_id)
|
||||||
|
return Alarm(alarm, ceilometer_usage)
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_update(request, alarm_id, ceilometer_usage=None, **kwargs):
|
||||||
|
"""Update an alarm."""
|
||||||
|
alarm = ceilometerclient(request).alarms.update(alarm_id, **kwargs)
|
||||||
|
return Alarm(alarm, ceilometer_usage)
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_delete(request, alarm_id):
|
||||||
|
"""Delete an alarm."""
|
||||||
|
ceilometerclient(request).alarms.delete(alarm_id)
|
||||||
|
|
||||||
|
|
||||||
|
def alarm_create(request, ceilometer_usage=None, **kwargs):
|
||||||
|
"""Create an alarm."""
|
||||||
|
alarm = ceilometerclient(request).alarms.create(**kwargs)
|
||||||
|
return Alarm(alarm, ceilometer_usage)
|
||||||
|
|
||||||
|
|
||||||
def resource_list(request, query=None, ceilometer_usage_object=None):
|
def resource_list(request, query=None, ceilometer_usage_object=None):
|
||||||
"""List the resources."""
|
"""List the resources."""
|
||||||
resources = ceilometerclient(request).resources.list(q=query)
|
resources = ceilometerclient(request).resources.list(q=query)
|
||||||
|
@@ -37,6 +37,55 @@ class CeilometerApiTests(test.APITestCase):
|
|||||||
for c in ret_list:
|
for c in ret_list:
|
||||||
self.assertIsInstance(c, api.ceilometer.Sample)
|
self.assertIsInstance(c, api.ceilometer.Sample)
|
||||||
|
|
||||||
|
def test_alarm_list(self):
|
||||||
|
alarms = self.alarms.list()
|
||||||
|
ceilometerclient = self.stub_ceilometerclient()
|
||||||
|
ceilometerclient.alarms = self.mox.CreateMockAnything()
|
||||||
|
ceilometerclient.alarms.list(q=[]).AndReturn(alarms)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
ret_list = api.ceilometer.alarm_list(self.request, query=[])
|
||||||
|
self.assertIsNotNone(ret_list)
|
||||||
|
for c in ret_list:
|
||||||
|
self.assertIsInstance(c, api.ceilometer.Alarm)
|
||||||
|
|
||||||
|
def test_alarm_get(self):
|
||||||
|
alarm = self.alarms.first()
|
||||||
|
ceilometerclient = self.stub_ceilometerclient()
|
||||||
|
ceilometerclient.alarms = self.mox.CreateMockAnything()
|
||||||
|
ceilometerclient.alarms.get(alarm.id).AndReturn(alarm)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
|
||||||
|
ret_alarm = api.ceilometer.alarm_get(self.request,
|
||||||
|
alarm_id='fake_alarm_id')
|
||||||
|
self.assertEqual(alarm.alarm_id, ret_alarm.alarm_id)
|
||||||
|
|
||||||
|
def test_alarm_create(self):
|
||||||
|
alarm = self.alarms.first()
|
||||||
|
new_alarm = {'alarm': alarm}
|
||||||
|
ceilometerclient = self.stub_ceilometerclient()
|
||||||
|
ceilometerclient.alarms = self.mox.CreateMockAnything()
|
||||||
|
ceilometerclient.alarms.create(**new_alarm).AndReturn(alarm)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
test_alarm = api.ceilometer.alarm_create(self.request,
|
||||||
|
**new_alarm)
|
||||||
|
self.assertEqual(alarm.alarm_id, test_alarm.alarm_id)
|
||||||
|
|
||||||
|
def test_alarm_update(self):
|
||||||
|
"""test update parameters"""
|
||||||
|
alarm1 = self.alarms.first()
|
||||||
|
alarm2 = self.alarms.list()[1]
|
||||||
|
ceilometerclient = self.stub_ceilometerclient()
|
||||||
|
ceilometerclient.alarms = self.mox.CreateMockAnything()
|
||||||
|
# Return the mock object that has "New" as description
|
||||||
|
ceilometerclient.alarms.update(alarm1.id,
|
||||||
|
description='New').AndReturn(alarm2)
|
||||||
|
self.mox.ReplayAll()
|
||||||
|
test_alarm = api.ceilometer.alarm_update(self.request,
|
||||||
|
alarm1.id,
|
||||||
|
description='New')
|
||||||
|
self.assertEqual(alarm2.description, test_alarm.description)
|
||||||
|
|
||||||
def test_meter_list(self):
|
def test_meter_list(self):
|
||||||
meters = self.meters.list()
|
meters = self.meters.list()
|
||||||
ceilometerclient = self.stub_ceilometerclient()
|
ceilometerclient = self.stub_ceilometerclient()
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from ceilometerclient.v2 import alarms
|
||||||
from ceilometerclient.v2 import meters
|
from ceilometerclient.v2 import meters
|
||||||
from ceilometerclient.v2 import resources
|
from ceilometerclient.v2 import resources
|
||||||
from ceilometerclient.v2 import samples
|
from ceilometerclient.v2 import samples
|
||||||
@@ -31,6 +32,7 @@ def data(TEST):
|
|||||||
TEST.api_resources = utils.TestDataContainer()
|
TEST.api_resources = utils.TestDataContainer()
|
||||||
TEST.samples = utils.TestDataContainer()
|
TEST.samples = utils.TestDataContainer()
|
||||||
TEST.meters = utils.TestDataContainer()
|
TEST.meters = utils.TestDataContainer()
|
||||||
|
TEST.alarms = utils.TestDataContainer()
|
||||||
TEST.statistics = utils.TestDataContainer()
|
TEST.statistics = utils.TestDataContainer()
|
||||||
TEST.global_disk_usages = utils.TestDataContainer()
|
TEST.global_disk_usages = utils.TestDataContainer()
|
||||||
TEST.global_network_usages = utils.TestDataContainer()
|
TEST.global_network_usages = utils.TestDataContainer()
|
||||||
@@ -174,6 +176,111 @@ def data(TEST):
|
|||||||
TEST.samples.add(sample_1)
|
TEST.samples.add(sample_1)
|
||||||
TEST.samples.add(sample_2)
|
TEST.samples.add(sample_2)
|
||||||
|
|
||||||
|
# alarms
|
||||||
|
alarm_dict_1 = {'alarm_actions': ['alarm_action1', 'alarm_action2'],
|
||||||
|
'ok_actions': ['ok_action_1', 'ok_action_2'],
|
||||||
|
'name': 'fake_alarm_name',
|
||||||
|
'timestamp': '2015-08-07T05:32:20.970341',
|
||||||
|
'description': 'fake_random_description',
|
||||||
|
'time_constraints': [],
|
||||||
|
'enabled': True,
|
||||||
|
'state_timestamp': '2015-08-07T17:59:11.351033',
|
||||||
|
'threshold_rule': {'meter_name': 'fake_meter_name',
|
||||||
|
'evaluation_periods': 1, 'period': 300,
|
||||||
|
'statistic': 'avg', 'threshold': 2.0,
|
||||||
|
'query': [],
|
||||||
|
'comparison_operator': 'ge',
|
||||||
|
'exclude_outliers': False},
|
||||||
|
'alarm_id': 'fake_alarm_id',
|
||||||
|
'state': 'ok',
|
||||||
|
'insufficient_data_actions': ['fake_action_1',
|
||||||
|
'fake_action_2'],
|
||||||
|
'repeat_actions': True,
|
||||||
|
'user_id': 'fake_user_id',
|
||||||
|
'project_id': 'fake_project_id',
|
||||||
|
'type': 'threshold',
|
||||||
|
'severity': 'low'}
|
||||||
|
alarm_dict_2 = {'alarm_actions': ['alarm_action1', 'alarm_action2'],
|
||||||
|
'ok_actions': ['ok_action_1', 'ok_action_2'],
|
||||||
|
'name': 'fake_alarm_name',
|
||||||
|
'timestamp': '2015-08-07T05:32:20.970341',
|
||||||
|
'description': 'New',
|
||||||
|
'time_constraints': [],
|
||||||
|
'enabled': True,
|
||||||
|
'state_timestamp': '2015-08-07T17:59:11.351033',
|
||||||
|
'threshold_rule': {'meter_name': 'fake_meter_name',
|
||||||
|
'evaluation_periods': 1, 'period': 300,
|
||||||
|
'statistic': 'avg', 'threshold': 2.0,
|
||||||
|
'query': [],
|
||||||
|
'comparison_operator': 'ge',
|
||||||
|
'exclude_outliers': False},
|
||||||
|
'alarm_id': 'fake_alarm_id2',
|
||||||
|
'state': 'ok',
|
||||||
|
'insufficient_data_actions': ['fake_action_1',
|
||||||
|
'fake_action_2'],
|
||||||
|
'repeat_actions': True,
|
||||||
|
'user_id': 'fake_user_id',
|
||||||
|
'project_id': 'fake_project_id',
|
||||||
|
'type': 'threshold',
|
||||||
|
'severity': 'low'}
|
||||||
|
alarm_dict_3 = {'alarm_actions': ['alarm_action1', 'alarm_action2'],
|
||||||
|
'ok_actions': ['ok_action_1', 'ok_action_2'],
|
||||||
|
'name': 'fake_alarm_name',
|
||||||
|
'timestamp': '2015-08-07T05:32:20.970341',
|
||||||
|
'description': 'fake_random_description',
|
||||||
|
'time_constraints': [],
|
||||||
|
'enabled': True,
|
||||||
|
'state_timestamp': '2015-08-07T17:59:11.351033',
|
||||||
|
'threshold_rule': {'meter_name': 'fake_meter_name',
|
||||||
|
'evaluation_periods': 2, 'period': 300,
|
||||||
|
'statistic': 'avg', 'threshold': 2.0,
|
||||||
|
'query': [{'field': 'resource_id',
|
||||||
|
'value': ''}],
|
||||||
|
'comparison_operator': 'ge',
|
||||||
|
'exclude_outliers': False},
|
||||||
|
'alarm_id': 'fake_alarm_id3',
|
||||||
|
'state': 'ok',
|
||||||
|
'insufficient_data_actions': ['fake_action_1',
|
||||||
|
'fake_action_2'],
|
||||||
|
'repeat_actions': True,
|
||||||
|
'user_id': '',
|
||||||
|
'project_id': '',
|
||||||
|
'type': 'threshold',
|
||||||
|
'severity': 'low'}
|
||||||
|
alarm_dict_4 = {'alarm_actions': ['alarm_action1', 'alarm_action2'],
|
||||||
|
'ok_actions': ['ok_action_1', 'ok_action_2'],
|
||||||
|
'name': 'fake_alarm_name4',
|
||||||
|
'timestamp': '2015-08-07T05:32:20.970341',
|
||||||
|
'description': 'fake_random_description',
|
||||||
|
'time_constraints': [],
|
||||||
|
'enabled': True,
|
||||||
|
'state_timestamp': '2015-08-07T17:59:11.351033',
|
||||||
|
'threshold_rule': {'meter_name': '',
|
||||||
|
'evaluation_periods': -10, 'period': -1,
|
||||||
|
'statistic': 'avg', 'threshold': '',
|
||||||
|
'query': [{'field': 'resource_id',
|
||||||
|
'value': ''}],
|
||||||
|
'comparison_operator': 'ge',
|
||||||
|
'exclude_outliers': False},
|
||||||
|
'alarm_id': 'fake_alarm_id4',
|
||||||
|
'state': 'ok',
|
||||||
|
'insufficient_data_actions': ['fake_action_1',
|
||||||
|
'fake_action_2'],
|
||||||
|
'repeat_actions': True,
|
||||||
|
'user_id': 'fake_user_id',
|
||||||
|
'project_id': 'fake_project_id',
|
||||||
|
'type': 'threshold',
|
||||||
|
'severity': 'low'}
|
||||||
|
|
||||||
|
alarm_1 = alarms.Alarm(alarms.AlarmManager(None), alarm_dict_1)
|
||||||
|
alarm_2 = alarms.Alarm(alarms.AlarmManager(None), alarm_dict_2)
|
||||||
|
alarm_3 = alarms.Alarm(alarms.AlarmManager(None), alarm_dict_3)
|
||||||
|
alarm_4 = alarms.Alarm(alarms.AlarmManager(None), alarm_dict_4)
|
||||||
|
TEST.alarms.add(alarm_1)
|
||||||
|
TEST.alarms.add(alarm_2)
|
||||||
|
TEST.alarms.add(alarm_3)
|
||||||
|
TEST.alarms.add(alarm_4)
|
||||||
|
|
||||||
# meters
|
# meters
|
||||||
meter_dict_1 = {'name': 'instance',
|
meter_dict_1 = {'name': 'instance',
|
||||||
'type': 'gauge',
|
'type': 'gauge',
|
||||||
|
Reference in New Issue
Block a user