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

Methods inherited from BaseAdapter

execute_after_circuit_callbacks, execute_before_circuit_callbacks

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



77
78
79
80
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 77

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



22
23
24
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 22

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

.data_storeObject

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



28
29
30
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 28

def data_store
  Configuration.config.data_store
end

.redis_hostObject

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



34
35
36
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 34

def redis_host
  Configuration.config.redis_host
end

.redis_portObject

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



40
41
42
# File 'lib/protoboard/adapters/stoplight_adapter.rb', line 40

def redis_port
  Configuration.config.redis_port
end

.run_circuit(circuit, &block) ⇒ Object

Runs the circuit using stoplight



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

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