Sha256: d55b9f8e9e0b5cd87854c688bc4d07ae3c76b7dc76cb70306fae739d02ed51c8

Contents?: true

Size: 1.13 KB

Versions: 33

Compression:

Stored size: 1.13 KB

Contents

module Airbrake
  module Sidekiq
    # Filter that can ignore notices from jobs that failed but will be retried
    # by Sidekiq
    # @since v7.3.0
    class RetryableJobsFilter
      if Gem::Version.new(::Sidekiq::VERSION) < Gem::Version.new('5.0.0')
        require 'sidekiq/middleware/server/retry_jobs'
        DEFAULT_MAX_RETRY_ATTEMPTS = \
          ::Sidekiq::Middleware::Server::RetryJobs::DEFAULT_MAX_RETRY_ATTEMPTS
      else
        require 'sidekiq/job_retry'
        DEFAULT_MAX_RETRY_ATTEMPTS = ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS
      end

      def call(notice)
        job = notice[:params][:job]

        notice.ignore! if retryable?(job)
      end

      private

      def retryable?(job)
        return false unless job && job['retry']

        max_attempts = max_attempts_for(job)
        job['retry_count'] < max_attempts
      end

      def max_attempts_for(job)
        if job['retry'].is_a?(Integer)
          job['retry']
        else
          max_retries
        end
      end

      def max_retries
        @max_retries ||= ::Sidekiq.options[:max_retries] || DEFAULT_MAX_RETRY_ATTEMPTS
      end
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
airbrake-9.2.2 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.2.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.2.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.1.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.0.2 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.0.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-9.0.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.3.2 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.3.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.3.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.2.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.2.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.1.4 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.1.3 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.1.2 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.1.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.1.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.0.1 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.0.0 lib/airbrake/sidekiq/retryable_jobs_filter.rb
airbrake-8.0.0.rc.9 lib/airbrake/sidekiq/retryable_jobs_filter.rb