class Airbrake::Sidekiq::RetryableJobsFilter

Filter that can ignore notices from jobs that failed but will be retried by Sidekiq @since v7.3.0

Constants

DEFAULT_MAX_RETRY_ATTEMPTS
SIDEKIQ_GTE_5_0_0
SIDEKIQ_GTE_7_0_0

Public Class Methods

new(max_retries: nil) click to toggle source
# File lib/airbrake/sidekiq/retryable_jobs_filter.rb, line 21
def initialize(max_retries: nil)
  @retries_before_notify = max_retries
end

Public Instance Methods

call(notice) click to toggle source
# File lib/airbrake/sidekiq/retryable_jobs_filter.rb, line 25
def call(notice)
  job = notice[:params][:job]

  notice.ignore! if retryable?(job)
end

Private Instance Methods

max_attempts_for(job) click to toggle source
# File lib/airbrake/sidekiq/retryable_jobs_filter.rb, line 41
def max_attempts_for(job)
  if @retries_before_notify
    @retries_before_notify
  elsif job['retry'].is_a?(Integer)
    job['retry']
  else
    max_retries
  end
end
max_retries() click to toggle source
# File lib/airbrake/sidekiq/retryable_jobs_filter.rb, line 51
def max_retries
  @max_retries ||= begin
    config = SIDEKIQ_GTE_7_0_0 ? ::Sidekiq.default_configuration : ::Sidekiq.options
    config[:max_retries] || DEFAULT_MAX_RETRY_ATTEMPTS
  end
end
retryable?(job) click to toggle source
# File lib/airbrake/sidekiq/retryable_jobs_filter.rb, line 33
def retryable?(job)
  return false unless job && job['retry']

  max_attempts = max_attempts_for(job)
  retry_count = (job['retry_count'] || -1) + 1
  retry_count < max_attempts
end