class Sidekiq::CircuitBreaker::Middleware::Server

Public Instance Methods

call(worker, msg, queue) { || ... } click to toggle source
# File lib/sidekiq/circuit_breaker/middleware/server.rb, line 9
def call(worker, msg, queue)
  circuit_breaker_enabled = worker.class.respond_to?(:sidekiq_circuit_breaker_enabled?)
  return yield unless circuit_breaker_enabled

  options = worker.class.sidekiq_circuit_breaker_options
  scope   = extract_scope(worker.class.name, msg, options)
  manager = Manager.new(scope, options)
  resquedule_job(worker, msg) and return if manager.open?

  begin
    yield
  rescue => e
    manager.evaluate_failure
    raise e
  end

  manager.register_success
end
resquedule_job(worker, msg) click to toggle source
# File lib/sidekiq/circuit_breaker/middleware/server.rb, line 28
def resquedule_job(worker, msg)
  Sidekiq::Client.push(
    'class' => worker.class.name,
    'args'  => msg['args']
  )
end