class Sidekiq::ExpectedFailures::Middleware

Attributes

handled_exceptions[R]

Public Instance Methods

call(worker, msg, queue) { || ... } click to toggle source
# File lib/sidekiq/expected_failures/middleware.rb, line 9
def call(worker, msg, queue)
  setup_exceptions(worker)

  yield

  rescue *handled_exceptions.keys => ex
    data = {
      failed_at: Time.now.strftime("%Y/%m/%d %H:%M:%S %Z"),
      args:      msg['args'],
      exception: ex.class.to_s,
      error:     ex.message,
      worker:    msg['class'],
      queue:     queue
    }

    log_exception(data, ex, msg)
end

Private Instance Methods

exception_intervals(ex) click to toggle source
# File lib/sidekiq/expected_failures/middleware.rb, line 33
def exception_intervals(ex)
  [handled_exceptions[ex.class]].flatten.compact
end
log_exception(data, ex, msg) click to toggle source
# File lib/sidekiq/expected_failures/middleware.rb, line 37
def log_exception(data, ex, msg)
  result = Sidekiq.redis do |conn|
    conn.multi do |m|
      m.lpush("expected:#{today}", Sidekiq.dump_json(data))
      m.sadd("expected:dates", today)
      m.hincrby("expected:count", data[:exception], 1)
    end
  end

  handle_exception(ex, msg) if exception_intervals(ex).include?(result[0])
end
setup_exceptions(worker) click to toggle source
# File lib/sidekiq/expected_failures/middleware.rb, line 29
def setup_exceptions(worker)
  @handled_exceptions = worker.class.get_sidekiq_options['expected_failures'] || Sidekiq.expected_failures
end
today() click to toggle source
# File lib/sidekiq/expected_failures/middleware.rb, line 49
def today
  Date.today.to_s
end