Class: Sc4ry::Circuits
- Inherits:
-
Object
- Object
- Sc4ry::Circuits
- Defined in:
- lib/sc4ry/circuits.rb
Constant Summary collapse
- @@circuits_store =
Sc4ry::Store.instance
- @@config =
{ :max_failure_count => 5, :timeout_value => 20, :timeout => false, :max_timeout_count => 5, :max_time => 10, :max_overtime_count => 3, :check_delay => 30, :notifiers => [], :forward_unknown_exceptions => true, :raise_on_opening => false, :exceptions => [StandardError, RuntimeError] }
Class Method Summary collapse
- .default_config ⇒ Object
- .default_config=(config) ⇒ Object
- .get(options) ⇒ Object
- .list ⇒ Object
- .register(options = {}) ⇒ Object
- .run(options = {}, &block) ⇒ Object
Class Method Details
.default_config ⇒ Object
19 20 21 |
# File 'lib/sc4ry/circuits.rb', line 19 def Circuits.default_config return @@config end |
.default_config=(config) ⇒ Object
23 24 25 |
# File 'lib/sc4ry/circuits.rb', line 23 def Circuits.default_config=(config) @@config = config end |
.get(options) ⇒ Object
40 41 42 |
# File 'lib/sc4ry/circuits.rb', line 40 def Circuits.get() @@circuits_store.get key: [:circuit] end |
.list ⇒ Object
35 36 37 |
# File 'lib/sc4ry/circuits.rb', line 35 def Circuits.list return @@circuits_store.list end |
.register(options = {}) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/sc4ry/circuits.rb', line 27 def Circuits.register( = {}) raise ":circuit is mandatory" unless [:circuit] name = [:circuit] override = ([:config].class == Hash)? [:config] : {} config = @@config.merge override @@circuits_store.put key: name, value: config end |
.run(options = {}, &block) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/sc4ry/circuits.rb', line 44 def Circuits.run( = {}, &block) circuits_list = Circuits.list raise "No circuit block given" unless block_given? raise "No circuits defined" if circuits_list.empty? circuit_name = ([:circuit])? [:circuit] : circuits_list.first raise "Circuit #{circuit_name} not found" unless circuits_list.include? circuit_name circuit = Circuits.get circuit: circuit_name skip = false if circuit.include? :status then if circuit[:status][:general] == :open then @now = Process.clock_gettime(Process::CLOCK_MONOTONIC) skip = true if ((@now - circuit[:values].last[:end_time]) < circuit[:check_delay]) end end unless skip controller = Sc4ry::RunController.new(circuit) Circuits.control circuit: circuit_name, values: controller.run(block: block) end Sc4ry::Helpers.log level: :info, message: "Circuit #{circuit_name} : status #{circuit[:status]}" end |