class Gracefully::CircuitBreaker
Attributes
opened_date[R]
Public Class Methods
new(*args)
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 5 def initialize(*args) if args.size > 0 options = args.first @try_close_after = options[:try_close_after] end @closed = true @health = options && options[:health] || Gracefully::ConsecutiveFailuresBasedHealth.new(become_unhealthy_after_consecutive_failures: 0) end
Public Instance Methods
close!()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 69 def close! @closed = true end
closed?()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 49 def closed? @closed end
execute(&block)
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 16 def execute(&block) if open? && (@try_close_after.nil? || try_close_period_passed?.!) raise CurrentlyOpenError, "Opened at #{opened_date}" end clear_opened_date! begin v = block.call mark_success v rescue => e mark_failure raise e end end
mark_failure()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 39 def mark_failure @health.mark_failure update! end
mark_success()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 33 def mark_success @health.mark_success update! end
open!()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 73 def open! @closed = false @opened_date = Time.now end
open?()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 45 def open? closed?.! end
try_close_period_passed?()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 53 def try_close_period_passed? opened_date && opened_date + @try_close_after < Time.now end
update!()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 61 def update! if @health.healthy? close! else open! end end
Private Instance Methods
clear_opened_date!()
click to toggle source
# File lib/gracefully/circuit_breaker.rb, line 80 def clear_opened_date! @opened_date = nil end