change the cron-trigger execution time from localtime to UTC
When a cron-trigger is created, in the output, the created time is shown in UTC but the next execution time is in localtime. It would be better if both times are shown in the same timezone. This patch changes the next execution time to UTC. Change-Id: Icae26cef37736cb55b9a2460f16e82afdb058165 Closes-Bug: #1592164
This commit is contained in:
parent
dce3be2831
commit
85be004102
@ -15,6 +15,7 @@
|
||||
import croniter
|
||||
import datetime
|
||||
import six
|
||||
import time
|
||||
|
||||
from mistral.db.v2 import api as db_api
|
||||
from mistral.engine.rpc_backend import rpc
|
||||
@ -25,14 +26,19 @@ from mistral.workbook import parser
|
||||
|
||||
|
||||
def get_next_execution_time(pattern, start_time):
|
||||
return croniter.croniter(pattern, start_time).get_next(datetime.datetime)
|
||||
local_time = croniter.croniter(pattern, start_time).get_next(
|
||||
datetime.datetime
|
||||
)
|
||||
epoch_second = time.mktime(local_time.timetuple())
|
||||
utc_time = datetime.datetime.utcfromtimestamp(epoch_second)
|
||||
return utc_time
|
||||
|
||||
|
||||
# Triggers v2.
|
||||
|
||||
def get_next_cron_triggers():
|
||||
return db_api.get_next_cron_triggers(
|
||||
datetime.datetime.now() + datetime.timedelta(0, 2)
|
||||
datetime.datetime.utcnow() + datetime.timedelta(0, 2)
|
||||
)
|
||||
|
||||
|
||||
@ -42,7 +48,10 @@ def validate_cron_trigger_input(pattern, first_time, count):
|
||||
'Pattern or first_execution_time must be specified.'
|
||||
)
|
||||
if first_time:
|
||||
if (datetime.datetime.now() + datetime.timedelta(0, 60)) > first_time:
|
||||
first_second = time.mktime(first_time.timetuple())
|
||||
first_utc_time = datetime.datetime.utcfromtimestamp(first_second)
|
||||
sum_time = datetime.datetime.utcnow() + datetime.timedelta(0, 60)
|
||||
if sum_time > first_utc_time:
|
||||
raise exc.InvalidModelException(
|
||||
'first_execution_time must be at least 1 minute in the future.'
|
||||
)
|
||||
@ -76,8 +85,12 @@ def create_cron_trigger(name, workflow_name, workflow_input,
|
||||
|
||||
validate_cron_trigger_input(pattern, first_time, count)
|
||||
|
||||
first_utc_time = first_time
|
||||
|
||||
if first_time:
|
||||
next_time = first_time
|
||||
first_second = time.mktime(first_time.timetuple())
|
||||
first_utc_time = datetime.datetime.utcfromtimestamp(first_second)
|
||||
next_time = first_utc_time
|
||||
|
||||
if not (pattern or count):
|
||||
count = 1
|
||||
@ -98,7 +111,7 @@ def create_cron_trigger(name, workflow_name, workflow_input,
|
||||
values = {
|
||||
'name': name,
|
||||
'pattern': pattern,
|
||||
'first_execution_time': first_time,
|
||||
'first_execution_time': first_utc_time,
|
||||
'next_execution_time': next_time,
|
||||
'remaining_executions': count,
|
||||
'workflow_name': wf_def.name,
|
||||
|
@ -12,6 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
import datetime
|
||||
import time
|
||||
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
@ -145,8 +146,11 @@ class ProcessCronTriggerTest(base.EngineTestCase):
|
||||
None
|
||||
)
|
||||
|
||||
first_second = time.mktime(first_time.timetuple())
|
||||
first_utc_time = datetime.datetime.utcfromtimestamp(first_second)
|
||||
|
||||
self.assertEqual(
|
||||
first_time,
|
||||
first_utc_time,
|
||||
cron_trigger.next_execution_time
|
||||
)
|
||||
|
||||
|
@ -329,3 +329,9 @@ class TriggerServiceV2Test(base.DbTestCase):
|
||||
eventlet.sleep(1)
|
||||
|
||||
return trigger_count == start_wf_mock.call_count
|
||||
|
||||
def test_get_next_execution_time(self):
|
||||
pattern = '*/20 * * * *'
|
||||
start_time = datetime.datetime(2016, 3, 22, 23, 40)
|
||||
result = t_s.get_next_execution_time(pattern, start_time)
|
||||
self.assertEqual(result, datetime.datetime(2016, 3, 23, 0, 0))
|
||||
|
Loading…
Reference in New Issue
Block a user