Class: RackJwtAegis::CircuitBreaker

Inherits:
Object
  • Object
show all
Defined in:
lib/rack_jwt_aegis/circuit_breaker.rb

Overview

Since:

  • 0.1.0

Constant Summary collapse

STATE_FAILURE_COUNT =

Since:

  • 0.1.0

'failure_count'
STATE_OPENED_AT =

Since:

  • 0.1.0

'opened_at'

Instance Method Summary collapse

Constructor Details

#initialize(failure_threshold:, cooldown_seconds:) ⇒ CircuitBreaker

Returns a new instance of CircuitBreaker.

Since:

  • 0.1.0



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

Returns:

  • (Boolean)

Since:

  • 0.1.0



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

Returns:

  • (Boolean)

Since:

  • 0.1.0



35
36
37
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 35

def open?
  !@state[STATE_OPENED_AT].nil?
end

#record_failureObject

Since:

  • 0.1.0



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_successObject

Since:

  • 0.1.0



25
26
27
# File 'lib/rack_jwt_aegis/circuit_breaker.rb', line 25

def record_success
  reset
end