class SwitchGearSidekiq::Middleware
Constants
- VERSION
Attributes
breakers[R]
Public Class Methods
new(breakers:)
click to toggle source
# 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
Public Instance Methods
call(worker, msg, queue, &block)
click to toggle source
# 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
Private Instance Methods
run_validations()
click to toggle source
# File lib/switch_gear_sidekiq/middleware.rb, line 33 def run_validations msg = "You must pass in an instance of a SwitchGear::CircuitBreaker" fail msg if breakers.any? { |klass, breaker| !breaker.is_a? SwitchGear::CircuitBreaker } end