debian-mirror-gitlab/app/models/concerns/cron_schedulable.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

45 lines
1.1 KiB
Ruby
Raw Normal View History

2021-06-08 01:23:25 +05:30
# frozen_string_literal: true
module CronSchedulable
extend ActiveSupport::Concern
include Schedulable
2021-09-04 01:27:46 +05:30
def set_next_run_at
self.next_run_at = calculate_next_run_at
end
private
2021-06-08 01:23:25 +05:30
##
# The `next_run_at` column is set to the actual execution date of worker that
# triggers the schedule. This way, a schedule like `*/1 * * * *` won't be triggered
# in a short interval when the worker runs irregularly by Sidekiq Memory Killer.
2021-11-11 11:23:49 +05:30
def calculate_next_run_at(start_time = Time.zone.now)
ideal_next_run = ideal_next_run_from(start_time)
2021-09-04 01:27:46 +05:30
2021-11-11 11:23:49 +05:30
if ideal_next_run == cron_worker_next_run_from(start_time)
2021-09-04 01:27:46 +05:30
ideal_next_run
else
cron_worker_next_run_from(ideal_next_run)
end
2021-06-08 01:23:25 +05:30
end
def ideal_next_run_from(start_time)
next_time_from(start_time, cron, cron_timezone)
end
def cron_worker_next_run_from(start_time)
next_time_from(start_time, worker_cron_expression, Time.zone.name)
end
def next_time_from(start_time, cron, cron_timezone)
Gitlab::Ci::CronParser
.new(cron, cron_timezone)
.next_time_from(start_time)
end
def worker_cron_expression
raise NotImplementedError
end
end