From: Steven Hardy Date: Tue, 22 Jan 2013 13:45:11 +0000 (+0000) Subject: heat engine : make WatchRule initial state NODATA X-Git-Tag: 2014.1~975 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=039c66b11ad817cf70233866de91b42208261bda;p=openstack-build%2Fheat-build.git heat engine : make WatchRule initial state NODATA Initial state should be NODATA not NORMAL, as we've not done any metric evaluation until the first evaluation period has elapsed fixes bug 1102446 Change-Id: Ic41df29c00a5df2f3d161bc1b1d054d816c5afa5 Signed-off-by: Steven Hardy --- diff --git a/heat/engine/watchrule.py b/heat/engine/watchrule.py index 6450bb8b..a613898f 100644 --- a/heat/engine/watchrule.py +++ b/heat/engine/watchrule.py @@ -44,7 +44,7 @@ class WatchRule(object): updated_at = timestamp.Timestamp(db_api.watch_rule_get, 'updated_at') def __init__(self, context, watch_name, rule, stack_id=None, - state=NORMAL, wid=None, watch_data=[], + state=NODATA, wid=None, watch_data=[], last_evaluated=timeutils.utcnow()): self.context = context self.now = timeutils.utcnow() diff --git a/heat/tests/test_watch.py b/heat/tests/test_watch.py index 12b96159..2baf4d66 100644 --- a/heat/tests/test_watch.py +++ b/heat/tests/test_watch.py @@ -328,7 +328,7 @@ class WatchRuleTest(unittest.TestCase): dbwr = db_api.watch_rule_get_by_name(self.ctx, 'storetest') self.assertNotEqual(dbwr, None) self.assertEqual(dbwr.name, 'storetest') - self.assertEqual(dbwr.state, watchrule.WatchRule.NORMAL) + self.assertEqual(dbwr.state, watchrule.WatchRule.NODATA) self.assertEqual(dbwr.rule, rule) # Cleanup @@ -347,9 +347,23 @@ class WatchRuleTest(unittest.TestCase): timeutils.utcnow().MultipleTimes().AndReturn(now) self.m.ReplayAll() - # Data breaches threshold, but it's not time to evaluate + # It's not time to evaluate, so should stay NODATA last = now - datetime.timedelta(seconds=299) - data = WatchData(35, now - datetime.timedelta(seconds=150)) + data = WatchData(25, now - datetime.timedelta(seconds=150)) + watcher = watchrule.WatchRule(context=self.ctx, + watch_name="testwatch", + rule=rule, + watch_data=[data], + stack_id=self.stack_id, + last_evaluated=last) + + actions = watcher.evaluate() + self.assertEqual(watcher.state, 'NODATA') + self.assertEqual(actions, []) + + # now - last == Period, so should set NORMAL + last = now - datetime.timedelta(seconds=300) + data = WatchData(25, now - datetime.timedelta(seconds=150)) watcher = watchrule.WatchRule(context=self.ctx, watch_name="testwatch", rule=rule, @@ -359,9 +373,10 @@ class WatchRuleTest(unittest.TestCase): actions = watcher.evaluate() self.assertEqual(watcher.state, 'NORMAL') + self.assertEqual(watcher.last_evaluated, now) self.assertEqual(actions, []) - # now - last == Period, so should set ALARM + # Now data breaches Threshold, so should set ALARM last = now - datetime.timedelta(seconds=300) data = WatchData(35, now - datetime.timedelta(seconds=150)) watcher = watchrule.WatchRule(context=self.ctx, @@ -374,7 +389,6 @@ class WatchRuleTest(unittest.TestCase): actions = watcher.evaluate() self.assertEqual(watcher.state, 'ALARM') self.assertEqual(watcher.last_evaluated, now) - # No AlarmActions defined in the rule, so expect [] self.assertEqual(actions, []) def test_rule_actions_alarm_normal(self): @@ -476,18 +490,17 @@ class WatchRuleTest(unittest.TestCase): now = timeutils.utcnow() self._action_set_stubs(now) - # Set data so rule evaluates to ALARM state + # On creation the rule evaluates to NODATA state last = now - datetime.timedelta(seconds=300) - data = WatchData(35, now - datetime.timedelta(seconds=150)) watcher = watchrule.WatchRule(context=self.ctx, watch_name="testwatch", rule=rule, - watch_data=[data], + watch_data=[], stack_id=self.stack_id, last_evaluated=last) actions = watcher.evaluate() - self.assertEqual(watcher.state, 'ALARM') + self.assertEqual(watcher.state, 'NODATA') self.assertEqual(actions, []) # Move time forward and add data below threshold so we transition from