Merge "Fix combination alarms"
This commit is contained in:
commit
ecc2ddd615
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user