Class: Protoboard::Adapters::StoplightAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/protoboard/adapters/stoplight_adapter.rb

Overview

This class manages every aspect for the execution of a circuit using the gem stoplight

Defined Under Namespace

Classes: Configuration

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseAdapter

execute_after_circuit_callbacks, execute_before_circuit_callbacks

Constructor Details

#initializeStoplightAdapter

Returns a new instance of StoplightAdapter.



19
20
21
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 19

def initialize
  prepare_data_store
end

Class Method Details

.check_state(circuit_name) ⇒ Object

Returns the state of a circuit

States returned

  • OK - when that stoplight circuit is green

  • NOT_OK - when that stoplight circuit is yellow or red



81
82
83
84
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 81

def check_state(circuit_name)
  mapper = { 'yellow' => 'NOT_OK', 'green' => 'OK', 'red' => 'NOT_OK' }
  mapper[Stoplight(circuit_name).color]
end

.configure(&block) ⇒ Object

This methods is used to make it easier to access adapter configurations



26
27
28
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 26

def configure(&block)
  Configuration.configure(&block)
end

.data_storeObject

This method is used to make it easier to access adapter data store configuration



32
33
34
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 32

def data_store
  Configuration.config.data_store
end

.redis_hostObject

This method is used to make it easier to access adapter redis host configuration



38
39
40
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 38

def redis_host
  Configuration.config.redis_host
end

.redis_portObject

This method is used to make it easier to access adapter redis port configuration



44
45
46
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 44

def redis_port
  Configuration.config.redis_port
end

.run_circuit(circuit, &block) ⇒ Object

Runs the circuit using stoplight



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 50

def run_circuit(circuit, &block)
  prepare_data_store

  circuit_execution = Protoboard::CircuitExecution.new(circuit)

  execute_before_circuit_callbacks(circuit_execution)

  stoplight = Stoplight(circuit.name, &block)
              .with_threshold(circuit.open_after)
              .with_cool_off_time(circuit.cool_off_after)

  stoplight.with_fallback(&circuit.fallback) if circuit.fallback
  value = stoplight.run

  circuit_execution = ::Protoboard::CircuitExecution.new(circuit, state: :success, value: value)
  execute_after_circuit_callbacks(circuit_execution)

  value
rescue StandardError =>  exception
  circuit_execution = Protoboard::CircuitExecution.new(circuit, state: :fail, error: exception)
  execute_after_circuit_callbacks(circuit_execution)

  raise circuit_execution.error if circuit_execution.fail?
end