Class: RackJwtAegis::CircuitBreaker
- Inherits:
-
Object
- Object
- RackJwtAegis::CircuitBreaker
- Defined in:
- lib/rack_jwt_aegis/circuit_breaker.rb
Overview
Constant Summary collapse
- STATE_FAILURE_COUNT =
'failure_count'- STATE_OPENED_AT =
'opened_at'
Instance Method Summary collapse
- #allow_request? ⇒ Boolean
-
#initialize(failure_threshold:, cooldown_seconds:) ⇒ CircuitBreaker
constructor
A new instance of CircuitBreaker.
- #open? ⇒ Boolean
- #record_failure ⇒ Object
- #record_success ⇒ Object
Constructor Details
#initialize(failure_threshold:, cooldown_seconds:) ⇒ CircuitBreaker
Returns a new instance of CircuitBreaker.
10 11 12 13 14 15 |
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 10 def initialize(failure_threshold:, cooldown_seconds:) @failure_threshold = failure_threshold.to_i @cooldown_seconds = cooldown_seconds.to_i @state = Ratomic::Map.new reset end |
Instance Method Details
#allow_request? ⇒ Boolean
17 18 19 20 21 22 23 |
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 17 def allow_request? return true unless open? return false unless cooldown_elapsed? reset true end |
#open? ⇒ Boolean
35 36 37 |
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 35 def open? !@state[STATE_OPENED_AT].nil? end |
#record_failure ⇒ Object
29 30 31 32 33 |
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 29 def record_failure failures = @state.increment(STATE_FAILURE_COUNT) @state[STATE_OPENED_AT] = Time.now.to_f if failures >= @failure_threshold failures end |
#record_success ⇒ Object
25 26 27 |
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 25 def record_success reset end |