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']
|
||||
|
||||
|
||||
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)
|
||||
|
@@ -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()
|
||||
|
@@ -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',
|
||||
|
Reference in New Issue
Block a user