discourse/app/jobs/scheduled/run_problem_checks.rb
Ted Johansson e60876ce49
FIX: Appropriately handle uninstalled problem checks (#28771)
When running checks, we look to the existing problem check trackers and try to grab their ProblemCheck classes.

In some cases this is no longer in the problem check repository, e.g. when the check was part of a plugin that has been uninstalled.

In the case where the check was scheduled, this would lead to an error in one of the jobs
2024-09-18 10:11:52 +08:00

31 lines
838 B
Ruby

# frozen_string_literal: true
module Jobs
# This job runs all of the scheduled problem checks for the admin dashboard
# on a regular basis. To add a problem check, add a new class that inherits
# the `ProblemCheck` base class.
class RunProblemChecks < ::Jobs::Scheduled
sidekiq_options retry: false
every 10.minutes
def execute(_args)
scheduled_checks =
ProblemCheckTracker.all.filter_map do |tracker|
tracker.check if eligible_for_this_run?(tracker)
end
scheduled_checks.each do |check|
Jobs.enqueue(:run_problem_check, check_identifier: check.identifier.to_s)
end
end
private
def eligible_for_this_run?(tracker)
tracker.check.present? && tracker.check.enabled? && tracker.check.scheduled? &&
tracker.ready_to_run?
end
end
end