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:
Shubham Chitranshi
2015-08-13 14:54:02 +05:30
committed by sanjana
parent 09a37991f7
commit 7df3624c58
3 changed files with 220 additions and 0 deletions

View File

@@ -267,6 +267,41 @@ class Statistic(base.APIResourceWrapper):
'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
def ceilometerclient(request):
"""Initialization of Ceilometer client."""
@@ -280,6 +315,35 @@ def ceilometerclient(request):
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):
"""List the resources."""
resources = ceilometerclient(request).resources.list(q=query)

View File

@@ -37,6 +37,55 @@ class CeilometerApiTests(test.APITestCase):
for c in ret_list:
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):
meters = self.meters.list()
ceilometerclient = self.stub_ceilometerclient()

View File

@@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from ceilometerclient.v2 import alarms
from ceilometerclient.v2 import meters
from ceilometerclient.v2 import resources
from ceilometerclient.v2 import samples
@@ -31,6 +32,7 @@ def data(TEST):
TEST.api_resources = utils.TestDataContainer()
TEST.samples = utils.TestDataContainer()
TEST.meters = utils.TestDataContainer()
TEST.alarms = utils.TestDataContainer()
TEST.statistics = utils.TestDataContainer()
TEST.global_disk_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_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
meter_dict_1 = {'name': 'instance',
'type': 'gauge',