lib/honeybadger/plugins/sidekiq.rb in honeybadger-4.5.6 vs lib/honeybadger/plugins/sidekiq.rb in honeybadger-4.6.0
- old
+ new
@@ -23,23 +23,33 @@
if defined?(::Sidekiq::VERSION) && ::Sidekiq::VERSION > '3'
::Sidekiq.configure_server do |sidekiq|
sidekiq.error_handlers << lambda {|ex, params|
job = params[:job] || params
- retry_count = job['retry_count'.freeze].to_i
- retry_opt = job['retry'.freeze]
- max_retries = if retry_opt.is_a?(Integer)
- [retry_opt - 1, config[:'sidekiq.attempt_threshold'].to_i].min
- else
- config[:'sidekiq.attempt_threshold'].to_i
+ 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
+
+ # Ensure we account for modified max_retries setting
+ retry_limit = job_retry == true ? (sidekiq.options[:max_retries] || 25) : job_retry.to_i
+ limit = [retry_limit, threshold].min
+
+ return if attempt < limit
end
- return if retry_opt && retry_count < max_retries
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