# frozen_string_literal: true

class ProblemCheck::SidekiqCheck < ProblemCheck
  self.priority = "low"

  def call
    if jobs_in_queue? && !jobs_performed_recently?
      return problem(override_key: "dashboard.problem.sidekiq")
    end

    if massive_queue?
      return(
        problem(
          override_key: "dashboard.problem.queue_size",
          override_data: {
            queue_size: Jobs.queued,
          },
        )
      )
    end

    no_problem
  end

  private

  def massive_queue?
    Jobs.queued >= 100_000
  end

  def jobs_in_queue?
    Jobs.queued > 0
  end

  def jobs_performed_recently?
    Jobs.last_job_performed_at.present? && Jobs.last_job_performed_at > 2.minutes.ago
  end
end