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