class Protoboard::Adapters::StoplightAdapter
This class manages every aspect for the execution of a circuit using the gem stoplight
Public Class Methods
check_state(circuit_name)
click to toggle source
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
# 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)
click to toggle source
This methods is used to make it easier to access adapter configurations
# File lib/protoboard/adapters/stoplight_adapter.rb, line 22 def configure(&block) Configuration.configure(&block) end
data_store()
click to toggle source
This method is used to make it easier to access adapter data store configuration
# File lib/protoboard/adapters/stoplight_adapter.rb, line 28 def data_store Configuration.config.data_store end
redis_host()
click to toggle source
This method is used to make it easier to access adapter redis host configuration
# File lib/protoboard/adapters/stoplight_adapter.rb, line 34 def redis_host Configuration.config.redis_host end
redis_port()
click to toggle source
This method is used to make it easier to access adapter redis port configuration
# File lib/protoboard/adapters/stoplight_adapter.rb, line 40 def redis_port Configuration.config.redis_port end
run_circuit(circuit, &block)
click to toggle source
Runs the circuit using stoplight
# 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
Private Class Methods
prepare_data_store()
click to toggle source
# File lib/protoboard/adapters/stoplight_adapter.rb, line 84 def prepare_data_store @prepare_data_store ||= case Configuration.config.data_store when :redis require 'redis' redis_host = Configuration.config.redis_host redis_port = Configuration.config.redis_port redis = Redis.new(host: redis_host, port: redis_port) data_store = Stoplight::DataStore::Redis.new(redis) Stoplight::Light.default_data_store = data_store else Stoplight::Light.default_data_store = Stoplight::DataStore::Memory.new end end