discourse/app/jobs/scheduled/topic_timer_enqueuer.rb

29 lines
879 B
Ruby

# frozen_string_literal: true
module Jobs
# Runs periodically to look through topic timers that are ready to execute,
# and enqueues their related jobs.
#
# Any leftovers will be caught in the next run, because execute_at will
# be < now, and topic timers that have run are deleted on completion or
# otherwise have their execute_at time modified.
class TopicTimerEnqueuer < ::Jobs::Scheduled
every 1.minute
def execute(_args = nil)
TopicTimer.pending_timers.find_each do |timer|
# the typed job may not enqueue if it has already
# been scheduled with enqueue_at
begin
timer.enqueue_typed_job
rescue => err
Discourse.warn_exception(
err,
message: "Error when attempting to enqueue topic timer job for timer #{timer.id}",
)
end
end
end
end
end