Don't send unuseful rpc alarm notification
If the alarm have no actions for the new state we don't need to send a message through the rpc for notification, just log a debug message when it occur. Fixes bug 1224416 Change-Id: I9aeb01e936dbacfbabb06e8b408d5ee04a93cb34
This commit is contained in:
parent
09e0f3fabf
commit
1feca03125
@ -20,6 +20,8 @@ from oslo.config import cfg
|
|||||||
|
|
||||||
from ceilometer.openstack.common import context
|
from ceilometer.openstack.common import context
|
||||||
from ceilometer.openstack.common.rpc import proxy as rpc_proxy
|
from ceilometer.openstack.common.rpc import proxy as rpc_proxy
|
||||||
|
from ceilometer.openstack.common import log
|
||||||
|
from ceilometer.openstack.common.gettextutils import _
|
||||||
from ceilometer.storage.models import Alarm
|
from ceilometer.storage.models import Alarm
|
||||||
|
|
||||||
OPTS = [
|
OPTS = [
|
||||||
@ -34,6 +36,8 @@ OPTS = [
|
|||||||
|
|
||||||
cfg.CONF.register_opts(OPTS, group='alarm')
|
cfg.CONF.register_opts(OPTS, group='alarm')
|
||||||
|
|
||||||
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class RPCAlarmNotifier(rpc_proxy.RpcProxy):
|
class RPCAlarmNotifier(rpc_proxy.RpcProxy):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -43,6 +47,14 @@ class RPCAlarmNotifier(rpc_proxy.RpcProxy):
|
|||||||
|
|
||||||
def notify(self, alarm, previous, reason):
|
def notify(self, alarm, previous, reason):
|
||||||
actions = getattr(alarm, Alarm.ALARM_ACTIONS_MAP[alarm.state])
|
actions = getattr(alarm, Alarm.ALARM_ACTIONS_MAP[alarm.state])
|
||||||
|
if not actions:
|
||||||
|
LOG.debug(_('alarm %(alarm_id)s has no action configured '
|
||||||
|
'for state transition from %(previous)s to '
|
||||||
|
'state %(state)s, skipping the notification.') %
|
||||||
|
{'alarm_id': alarm.alarm_id,
|
||||||
|
'previous': previous,
|
||||||
|
'state': alarm.state})
|
||||||
|
return
|
||||||
msg = self.make_msg('notify_alarm', data={
|
msg = self.make_msg('notify_alarm', data={
|
||||||
'actions': actions,
|
'actions': actions,
|
||||||
'alarm_id': alarm.alarm_id,
|
'alarm_id': alarm.alarm_id,
|
||||||
|
@ -96,3 +96,23 @@ class TestRPCAlarmNotifier(base.TestCase):
|
|||||||
self.notifier.notify(self.alarms[0], 'ok', 42)
|
self.notifier.notify(self.alarms[0], 'ok', 42)
|
||||||
reason = self.notified[0][1]['args']['data']['reason']
|
reason = self.notified[0][1]['args']['data']['reason']
|
||||||
self.assertTrue(isinstance(reason, basestring))
|
self.assertTrue(isinstance(reason, basestring))
|
||||||
|
|
||||||
|
def test_notify_no_actions(self):
|
||||||
|
alarm = AlarmClient(None, info={
|
||||||
|
'name': 'instance_running_hot',
|
||||||
|
'meter_name': 'cpu_util',
|
||||||
|
'comparison_operator': 'gt',
|
||||||
|
'threshold': 80.0,
|
||||||
|
'evaluation_periods': 5,
|
||||||
|
'statistic': 'avg',
|
||||||
|
'state': 'ok',
|
||||||
|
'user_id': 'foobar',
|
||||||
|
'project_id': 'snafu',
|
||||||
|
'period': 60,
|
||||||
|
'ok_actions': [],
|
||||||
|
'alarm_id': str(uuid.uuid4()),
|
||||||
|
'matching_metadata': {'resource_id':
|
||||||
|
'my_instance'}
|
||||||
|
})
|
||||||
|
self.notifier.notify(alarm, 'alarm', "what?")
|
||||||
|
self.assertEqual(len(self.notified), 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user