diff --git a/karbor/services/operationengine/engine/triggers/timetrigger/timeformats/calendar_time.py b/karbor/services/operationengine/engine/triggers/timetrigger/timeformats/calendar_time.py index 54af7d17..8c01f0d7 100644 --- a/karbor/services/operationengine/engine/triggers/timetrigger/timeformats/calendar_time.py +++ b/karbor/services/operationengine/engine/triggers/timetrigger/timeformats/calendar_time.py @@ -11,7 +11,7 @@ # under the License. import os -from datetime import timedelta +from datetime import datetime from dateutil import rrule from icalendar import Calendar from oslo_serialization import jsonutils @@ -121,23 +121,9 @@ class ICal(timeformats.TimeFormat): :return: int(seconds) or None """ - gen = self.rrule_obj - kwargs = FREQ_TO_KWARGS[self.min_freq] - endtime = self.dtstart + timedelta(**kwargs) - - deltas = [] - t0 = None - for dt in gen: - if dt > endtime: - break - t1 = t0 - t0 = dt - if t1 is None or t0 is None or dt <= self.dtstart: - continue - delta = timeutils.delta_seconds(t1, t0) - if delta: - deltas.append(delta) - if len(deltas): - return min(deltas) - else: + try: + t1 = self.compute_next_time(datetime.now()) + t2 = self.compute_next_time(t1) + return timeutils.delta_seconds(t1, t2) + except Exception: return None diff --git a/karbor/tests/unit/operationengine/engine/triggers/timetrigger/timeformats/test_calendar_time.py b/karbor/tests/unit/operationengine/engine/triggers/timetrigger/timeformats/test_calendar_time.py index 0223f293..8a51f144 100644 --- a/karbor/tests/unit/operationengine/engine/triggers/timetrigger/timeformats/test_calendar_time.py +++ b/karbor/tests/unit/operationengine/engine/triggers/timetrigger/timeformats/test_calendar_time.py @@ -173,3 +173,13 @@ class CalendarTimeTestCase(base.TestCase): dtstart = datetime(2016, 2, 20, 17, 0, 0) time_obj = calendar_time.ICal(dtstart, pattern) self.assertIsNone(time_obj.get_min_interval()) + + def test_get_min_interval_when_interval_is_bigger_than_default_rate(self): + pattern = ( + "BEGIN:VEVENT\n" + "RRULE:FREQ=MINUTELY;INTERVAL=5;\n" + "END:VEVENT" + ) + dtstart = datetime(2016, 2, 20, 17, 0, 0) + time_obj = calendar_time.ICal(dtstart, pattern) + self.assertEqual(300, time_obj.get_min_interval())