class Sidekiq::Failures::Middleware
Attributes
msg[RW]
Public Instance Methods
call(worker, msg, queue) { || ... }
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 7 def call(worker, msg, queue) self.msg = msg yield rescue Sidekiq::Shutdown raise rescue Exception => e raise e if skip_failure? msg['error_message'] = e.message msg['error_class'] = e.class.name msg['processor'] = identity msg['failed_at'] = Time.now.utc.to_f if msg['backtrace'] == true msg['error_backtrace'] = e.backtrace elsif msg['backtrace'] == false # do nothing elsif msg['backtrace'].to_i != 0 msg['error_backtrace'] = e.backtrace[0..msg['backtrace'].to_i] end payload = Sidekiq.dump_json(msg) Sidekiq.redis do |conn| conn.zadd(LIST_KEY, Time.now.utc.to_f, payload) unless Sidekiq.failures_max_count == false conn.zremrangebyrank(LIST_KEY, 0, -(Sidekiq.failures_max_count + 1)) end end raise e end
Private Instance Methods
default_max_retries()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 87 def default_max_retries Sidekiq::Failures.retry_middleware_class::DEFAULT_MAX_RETRY_ATTEMPTS end
exhausted?()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 66 def exhausted? !retriable? || retry_count >= max_retries end
failure_mode()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 53 def failure_mode case msg['failures'].to_s when 'true', 'all' :all when 'false', 'off' :off when 'exhausted' :exhausted else Sidekiq.failures_default_mode end end
failure_mode_exhausted?()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 45 def failure_mode_exhausted? failure_mode == :exhausted end
failure_mode_off?()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 41 def failure_mode_off? failure_mode == :off end
hostname()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 91 def hostname Socket.gethostname end
identity()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 95 def identity @@identity ||= "#{hostname}:#{$$}" end
max_retries()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 78 def max_retries retry_middleware.send(:retry_attempts_from, msg['retry'], default_max_retries) end
retriable?()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 70 def retriable? msg['retry'] end
retry_count()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 74 def retry_count msg['retry_count'] || 0 end
retry_middleware()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 82 def retry_middleware @retry_middleware ||= Sidekiq::Failures.retry_middleware_class.new end
skip_failure?()
click to toggle source
# File lib/sidekiq/failures/middleware.rb, line 49 def skip_failure? failure_mode_off? || failure_mode_exhausted? && !exhausted? end