Merge "Fix combination alarms"

This commit is contained in:
Jenkins 2015-11-20 22:20:52 +00:00 committed by Gerrit Code Review
commit ecc2ddd615
2 changed files with 53 additions and 49 deletions

View File

@ -20,7 +20,7 @@ from oslo_log import log
from six import moves
from aodh import evaluator
from aodh.i18n import _
from aodh.i18n import _, _LE
LOG = log.getLogger(__name__)
@ -31,11 +31,14 @@ class CombinationEvaluator(evaluator.Evaluator):
def _get_alarm_state(self, alarm_id):
try:
alarm = self._storage_conn.get_alarms(alarm_id=alarm_id)
alarms = self._storage_conn.get_alarms(alarm_id=alarm_id)
except Exception:
LOG.exception(_('alarm retrieval failed'))
LOG.exception(_LE('alarm %s retrieval failed'), alarm_id)
return None
return alarm.state
if not alarms:
LOG.error(_LE("alarm %s doesn't exists anymore"), alarm_id)
return None
return list(alarms)[0].state
def _sufficient_states(self, alarm, states):
"""Check for the sufficiency of the data for evaluation.
@ -107,6 +110,7 @@ class CombinationEvaluator(evaluator.Evaluator):
states = zip(alarm.rule['alarm_ids'],
moves.map(self._get_alarm_state, alarm.rule['alarm_ids']))
# states is consumed more than once, we need a list
states = list(states)

View File

@ -85,8 +85,8 @@ class TestEvaluate(base.TestEvaluatorBase):
]
@staticmethod
def _get_alarm(state):
return alarms.Alarm(None, {'state': state})
def _get_alarms(state):
return [alarms.Alarm(None, {'state': state})]
@staticmethod
def _reason_data(alarm_ids):
@ -117,10 +117,10 @@ class TestEvaluate(base.TestEvaluatorBase):
broken,
broken,
broken,
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
self._assert_all_alarms('insufficient data')
@ -148,10 +148,10 @@ class TestEvaluate(base.TestEvaluatorBase):
def test_to_ok_with_all_ok(self):
self._set_all_alarms('insufficient data')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -170,10 +170,10 @@ class TestEvaluate(base.TestEvaluatorBase):
def test_to_ok_with_one_alarm(self):
self._set_all_alarms('alarm')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('alarm'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('alarm'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -191,10 +191,10 @@ class TestEvaluate(base.TestEvaluatorBase):
def test_to_alarm_with_all_alarm(self):
self._set_all_alarms('ok')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -212,10 +212,10 @@ class TestEvaluate(base.TestEvaluatorBase):
def test_to_alarm_with_one_insufficient_data(self):
self._set_all_alarms('ok')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('insufficient data'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarms('insufficient data'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -233,10 +233,10 @@ class TestEvaluate(base.TestEvaluatorBase):
def test_to_alarm_with_one_ok(self):
self._set_all_alarms('ok')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarm('alarm'),
self._get_alarms('ok'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
self._get_alarms('alarm'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -256,9 +256,9 @@ class TestEvaluate(base.TestEvaluatorBase):
broken = exc.CommunicationError(message='broken')
self.storage_conn.get_alarms.side_effect = [
broken,
self._get_alarm('ok'),
self._get_alarm('insufficient data'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('insufficient data'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -280,10 +280,10 @@ class TestEvaluate(base.TestEvaluatorBase):
self._set_all_alarms('ok')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
update_calls = self.storage_conn.update_alarm.call_args_list
@ -295,10 +295,10 @@ class TestEvaluate(base.TestEvaluatorBase):
self.alarms[1].repeat_actions = True
self._set_all_alarms('ok')
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
update_calls = self.storage_conn.update_alarm.call_args_list
@ -328,10 +328,10 @@ class TestEvaluate(base.TestEvaluatorBase):
tzinfo=pytz.timezone('Europe/Ljubljana'))
mock_utcnow.return_value = dt.astimezone(pytz.UTC)
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
expected = [mock.call(alarm) for alarm in self.alarms]
@ -365,10 +365,10 @@ class TestEvaluate(base.TestEvaluatorBase):
mock_utcnow.return_value = dt.astimezone(pytz.UTC)
self.storage_conn.get_alarms.side_effect = [
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarm('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
self._get_alarms('ok'),
]
self._evaluate_all_alarms()
update_calls = self.storage_conn.update_alarm.call_args_list