Class: SwitchGearSidekiq::Middleware
- Inherits:
-
Object
- Object
- SwitchGearSidekiq::Middleware
- Defined in:
- lib/switch_gear_sidekiq/middleware.rb
Constant Summary collapse
- VERSION =
"0.1.0"
Instance Attribute Summary collapse
-
#breakers ⇒ Object
readonly
Returns the value of attribute breakers.
Instance Method Summary collapse
- #call(worker, msg, queue, &block) ⇒ Object
-
#initialize(breakers:) ⇒ Middleware
constructor
A new instance of Middleware.
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
#breakers ⇒ Object (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 |