Class: RuboCop::Cop::Sidekiq::SleepInJobs

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/sidekiq/sleep_in_jobs.rb

Overview

Checks for sleep calls inside Sidekiq jobs.

Using sleep in a Sidekiq job blocks the worker thread and prevents it from processing other jobs. Instead, use perform_in or perform_at to schedule the job for later.

Examples:

# bad
class MyJob
  include Sidekiq::Job

  def perform
    sleep 5
  end
end

# good - use perform_in instead
MyJob.perform_in(5.seconds, args)

Constant Summary collapse

MSG =
'Do not use `sleep` in Sidekiq jobs. ' \
'It blocks the worker thread. Use `perform_in` or `perform_at` instead.'
RESTRICT_ON_SEND =
%i[sleep].freeze

Instance Method Summary collapse

Methods included from Sidekiq::Language

#active_job_class?, #perform_call?, #sidekiq_include?, #sidekiq_options_call?

Instance Method Details

#on_send(node) ⇒ Object Also known as: on_csend



36
37
38
39
40
41
# File 'lib/rubocop/cop/sidekiq/sleep_in_jobs.rb', line 36

def on_send(node)
  return unless sleep_call?(node)
  return unless in_sidekiq_job?(node)

  add_offense(node)
end

#sleep_call?(node) ⇒ Object



32
33
34
# File 'lib/rubocop/cop/sidekiq/sleep_in_jobs.rb', line 32

def_node_matcher :sleep_call?, <<~PATTERN
  (send {nil? (const {nil? cbase} :Kernel)} :sleep ...)
PATTERN