2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-10-03 17:21:20 +08:00

FIX: Run scheduled problem checks even when no tracker exists yet (#35102)

### What is this change?

Scheduled problem checks without trackers weren't being run. This is
because we directly tried to look for trackers instead of going through
the checks.
This commit is contained in:
Ted Johansson 2025-10-01 21:21:44 +08:00 committed by GitHub
parent 891106d5f4
commit 480e05e67a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 13 deletions

View file

@ -10,21 +10,17 @@ module Jobs
every 10.minutes every 10.minutes


def execute(_args) def execute(_args)
scheduled_checks = ProblemCheck.scheduled.filter_map do |check|
ProblemCheckTracker.all.filter_map do |tracker| if eligible_for_this_run?(check)
tracker.check if eligible_for_this_run?(tracker) Jobs.enqueue(:run_problem_check, check_identifier: check.identifier.to_s)
end end

scheduled_checks.each do |check|
Jobs.enqueue(:run_problem_check, check_identifier: check.identifier.to_s)
end end
end end


private private


def eligible_for_this_run?(tracker) def eligible_for_this_run?(check)
tracker.check.present? && tracker.check.enabled? && tracker.check.scheduled? && check.enabled? && check.scheduled? && check.ready_to_run?
tracker.ready_to_run?
end end
end end
end end

View file

@ -112,6 +112,11 @@ class ProblemCheck
Collection.new(checks.select(&:realtime?)) Collection.new(checks.select(&:realtime?))
end end


def self.tracker(target = NO_TARGET)
ProblemCheckTracker[identifier, target]
end
delegate :tracker, to: :class

def self.identifier def self.identifier
name.demodulize.underscore.to_sym name.demodulize.underscore.to_sym
end end
@ -137,6 +142,11 @@ class ProblemCheck
end end
delegate :inline?, to: :class delegate :inline?, to: :class


def self.ready_to_run?
tracker.ready_to_run?
end
delegate :ready_to_run?, to: :class

def self.call(data = {}) def self.call(data = {})
new(data).call new(data).call
end end
@ -180,10 +190,6 @@ class ProblemCheck


private private


def tracker(target = NO_TARGET)
ProblemCheckTracker[identifier, target]
end

def targets def targets
[NO_TARGET] [NO_TARGET]
end end

View file

@ -31,6 +31,17 @@ RSpec.describe Jobs::RunProblemChecks do
ProblemCheck.send(:remove_const, "DisabledCheck") ProblemCheck.send(:remove_const, "DisabledCheck")
end end


context "when a tracker hasn't been created yet" do
it "still schedules checks" do
expect_enqueued_with(
job: :run_problem_check,
args: {
check_identifier: "scheduled_check",
},
) { described_class.new.execute([]) }
end
end

context "when the tracker determines the check is ready to run" do context "when the tracker determines the check is ready to run" do
before do before do
ProblemCheckTracker.create!(identifier: "scheduled_check", next_run_at: 5.minutes.ago) ProblemCheckTracker.create!(identifier: "scheduled_check", next_run_at: 5.minutes.ago)