Class: SwitchGearSidekiq::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/switch_gear_sidekiq/middleware.rb

Constant Summary collapse

VERSION =
"0.1.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(breakers:) ⇒ Middleware

Returns a new instance of Middleware.



9
10
11
12
13
14
# File 'lib/switch_gear_sidekiq/middleware.rb', line 9

def initialize(breakers:)
  @breakers = breakers.each_with_object({}) do |breaker, hash|
    hash[breaker.worker] = breaker
  end
  run_validations
end

Instance Attribute Details

#breakersObject (readonly)

Returns the value of attribute breakers.



7
8
9
# File 'lib/switch_gear_sidekiq/middleware.rb', line 7

def breakers
  @breakers
end

Instance Method Details

#call(worker, msg, queue, &block) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/switch_gear_sidekiq/middleware.rb', line 16

def call(worker, msg, queue, &block)
  breaker = breakers[worker.class]
  Sidekiq.logger.debug "Breaker being used: #{breaker}"

  breaker.call(block)
rescue SwitchGear::CircuitBreaker::OpenError
  retry_in = breaker.reset_timeout + 1
  fail_msg = "Circuit is open for worker: #{breaker.worker} - blocking all calls;"
  fail_msg += "  Jobs will try again in: #{retry_in} "
  Sidekiq.logger.warn fail_msg

  # Here we'll re-enqueue the job to be 1 second above the reset_timeout period
  worker.class.perform_in(retry_in, *msg['args'])
end