lib/honeybadger/plugins/sidekiq.rb in honeybadger-5.2.0 vs lib/honeybadger/plugins/sidekiq.rb in honeybadger-5.2.1

- old
+ new

@@ -1,71 +1,71 @@ -require 'honeybadger/plugin' -require 'honeybadger/ruby' - -module Honeybadger - module Plugins - module Sidekiq - class Middleware - def call(_worker, _msg, _queue) - Honeybadger.clear! - yield - end - end - - Plugin.register do - requirement { defined?(::Sidekiq) } - - execution do - ::Sidekiq.configure_server do |sidekiq| - sidekiq.server_middleware do |chain| - chain.prepend Middleware - end - end - - if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3' - ::Sidekiq.configure_server do |sidekiq| - - sidekiq.error_handlers << lambda { |ex, sidekiq_params| - params = sidekiq_params.dup - if defined?(::Sidekiq::Config) && params[:_config].is_a?(::Sidekiq::Config) - params[:_config] = params[:_config].instance_variable_get(:@options) - end - - job = params[:job] || params - - job_retry = job['retry'.freeze] - - if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry - # We calculate the job attempts to determine the need to - # skip. Sidekiq's first job execution will have nil for the - # 'retry_count' job key. The first retry will have 0 set for - # the 'retry_count' key, incrementing on each execution - # afterwards. - retry_count = job['retry_count'.freeze] - attempt = retry_count ? retry_count + 1 : 0 - - max_retries = (::Sidekiq::VERSION > '7') ? - ::Sidekiq.default_configuration[:max_retries] : sidekiq.options[:max_retries] - # Ensure we account for modified max_retries setting - default_max_retry_attempts = defined?(::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS) ? ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS : 25 - retry_limit = job_retry == true ? (max_retries || default_max_retry_attempts) : job_retry.to_i - - limit = [retry_limit, threshold].min - - return if attempt < limit - end - - opts = { parameters: params } - if config[:'sidekiq.use_component'] - opts[:component] = job['wrapped'.freeze] || job['class'.freeze] - opts[:action] = 'perform' if opts[:component] - end - - Honeybadger.notify(ex, opts) - } - end - end - end - end - end - end -end +require 'honeybadger/plugin' +require 'honeybadger/ruby' + +module Honeybadger + module Plugins + module Sidekiq + class Middleware + def call(_worker, _msg, _queue) + Honeybadger.clear! + yield + end + end + + Plugin.register do + requirement { defined?(::Sidekiq) } + + execution do + ::Sidekiq.configure_server do |sidekiq| + sidekiq.server_middleware do |chain| + chain.prepend Middleware + end + end + + if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3' + ::Sidekiq.configure_server do |sidekiq| + + sidekiq.error_handlers << lambda { |ex, sidekiq_params| + params = sidekiq_params.dup + if defined?(::Sidekiq::Config) && params[:_config].is_a?(::Sidekiq::Config) + params[:_config] = params[:_config].instance_variable_get(:@options) + end + + job = params[:job] || params + + job_retry = job['retry'.freeze] + + if (threshold = config[:'sidekiq.attempt_threshold'].to_i) > 0 && job_retry + # We calculate the job attempts to determine the need to + # skip. Sidekiq's first job execution will have nil for the + # 'retry_count' job key. The first retry will have 0 set for + # the 'retry_count' key, incrementing on each execution + # afterwards. + retry_count = job['retry_count'.freeze] + attempt = retry_count ? retry_count + 1 : 0 + + max_retries = (::Sidekiq::VERSION > '7') ? + ::Sidekiq.default_configuration[:max_retries] : sidekiq.options[:max_retries] + # Ensure we account for modified max_retries setting + default_max_retry_attempts = defined?(::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS) ? ::Sidekiq::JobRetry::DEFAULT_MAX_RETRY_ATTEMPTS : 25 + retry_limit = job_retry == true ? (max_retries || default_max_retry_attempts) : job_retry.to_i + + limit = [retry_limit, threshold].min + + return if attempt < limit + end + + opts = { parameters: params } + if config[:'sidekiq.use_component'] + opts[:component] = job['wrapped'.freeze] || job['class'.freeze] + opts[:action] = 'perform' if opts[:component] + end + + Honeybadger.notify(ex, opts) + } + end + end + end + end + end + end +end