Use timeutils.utcnow in alarm threshold evaluation
This change use timeutils.utcnow() in alarm threshold evaluation instead of datetime.utcnow() to allow mock the the now datetime It also add a test to check the behavior of bound_duration method. Change-Id: I970e63da33e17018ed4fef31d0082803f6e0fb29
This commit is contained in:
parent
c0acc9797e
commit
3deb7397ba
@ -22,6 +22,7 @@ import operator
|
|||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
from ceilometer.openstack.common import log
|
from ceilometer.openstack.common import log
|
||||||
|
from ceilometer.openstack.common import timeutils
|
||||||
from ceilometerclient import client as ceiloclient
|
from ceilometerclient import client as ceiloclient
|
||||||
from ceilometer.openstack.common.gettextutils import _
|
from ceilometer.openstack.common.gettextutils import _
|
||||||
|
|
||||||
@ -90,7 +91,7 @@ class Evaluator(object):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def _bound_duration(cls, alarm, constraints):
|
def _bound_duration(cls, alarm, constraints):
|
||||||
"""Bound the duration of the statistics query."""
|
"""Bound the duration of the statistics query."""
|
||||||
now = datetime.datetime.utcnow()
|
now = timeutils.utcnow()
|
||||||
window = (alarm.period *
|
window = (alarm.period *
|
||||||
(alarm.evaluation_periods + cls.look_back))
|
(alarm.evaluation_periods + cls.look_back))
|
||||||
start = now - datetime.timedelta(seconds=window)
|
start = now - datetime.timedelta(seconds=window)
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
"""Tests for ceilometer/alarm/threshold_evaluation.py
|
"""Tests for ceilometer/alarm/threshold_evaluation.py
|
||||||
"""
|
"""
|
||||||
|
import datetime
|
||||||
import mock
|
import mock
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from ceilometer.alarm import threshold_evaluation
|
from ceilometer.alarm import threshold_evaluation
|
||||||
|
from ceilometer.openstack.common import timeutils
|
||||||
from ceilometer.storage import models
|
from ceilometer.storage import models
|
||||||
from ceilometer.tests import base
|
from ceilometer.tests import base
|
||||||
from ceilometerclient import exc
|
from ceilometerclient import exc
|
||||||
@ -61,6 +63,10 @@ class TestEvaluate(base.TestCase):
|
|||||||
self.evaluator = threshold_evaluation.Evaluator(self.notifier)
|
self.evaluator = threshold_evaluation.Evaluator(self.notifier)
|
||||||
self.evaluator.assign_alarms(self.alarms)
|
self.evaluator.assign_alarms(self.alarms)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(TestEvaluate, self).tearDown()
|
||||||
|
timeutils.utcnow.override_time = None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_stat(attr, value):
|
def _get_stat(attr, value):
|
||||||
return statistics.Statistics(None, {attr: value})
|
return statistics.Statistics(None, {attr: value})
|
||||||
@ -273,3 +279,15 @@ class TestEvaluate(base.TestCase):
|
|||||||
expected = [mock.call(alarm, 'insufficient data', reason)
|
expected = [mock.call(alarm, 'insufficient data', reason)
|
||||||
for alarm, reason in zip(self.alarms, reasons)]
|
for alarm, reason in zip(self.alarms, reasons)]
|
||||||
self.assertEqual(self.notifier.notify.call_args_list, expected)
|
self.assertEqual(self.notifier.notify.call_args_list, expected)
|
||||||
|
|
||||||
|
def test_bound_duration(self):
|
||||||
|
timeutils.utcnow.override_time = datetime.datetime(2012, 7, 2, 10, 45)
|
||||||
|
constraint = self.evaluator._bound_duration(self.alarms[0], [])
|
||||||
|
self.assertEqual(constraint, [
|
||||||
|
{'field': 'timestamp',
|
||||||
|
'op': 'le',
|
||||||
|
'value': timeutils.utcnow().isoformat()},
|
||||||
|
{'field': 'timestamp',
|
||||||
|
'op': 'ge',
|
||||||
|
'value': '2012-07-02T10:39:00'},
|
||||||
|
])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user