Module: Legion::Provider::Registry
- Extended by:
- TSort
- Defined in:
- lib/legion/provider.rb
Class Method Summary collapse
- .boot!(mode: :full, timeout: 30) ⇒ Object
- .boot_order ⇒ Object
- .providers ⇒ Object
- .register(provider_class) ⇒ Object
- .reset! ⇒ Object
- .shutdown!(instances) ⇒ Object
Class Method Details
.boot!(mode: :full, timeout: 30) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/legion/provider.rb', line 85 def boot!(mode: :full, timeout: 30) booted = [] boot_order.each do |key| klass = providers[key] instance = klass.new(mode: mode) instance.select_adapter(mode) Timeout.timeout(timeout) { instance.boot } Legion::Readiness.mark_ready(key) if defined?(Legion::Readiness) booted << instance rescue Timeout::Error => e Legion::Logging.error "Provider :#{key} boot timed out (#{timeout}s)" if defined?(Legion::Logging) shutdown!(booted) raise Provider::MissingDependencyError, "provider :#{key} timed out during boot: #{e.}" rescue StandardError => e Legion::Logging.error "Provider :#{key} boot failed: #{e.}" if defined?(Legion::Logging) shutdown!(booted) raise end booted end |
.boot_order ⇒ Object
78 79 80 81 82 83 |
# File 'lib/legion/provider.rb', line 78 def boot_order validate_dependencies! tsort rescue TSort::Cyclic => e raise Provider::CyclicDependencyError, "cyclic dependency detected: #{e.}" end |
.providers ⇒ Object
67 68 69 |
# File 'lib/legion/provider.rb', line 67 def providers @providers ||= {} end |
.register(provider_class) ⇒ Object
71 72 73 74 75 76 |
# File 'lib/legion/provider.rb', line 71 def register(provider_class) key = provider_class.provides return unless key providers[key] = provider_class end |
.reset! ⇒ Object
116 117 118 |
# File 'lib/legion/provider.rb', line 116 def reset! @providers = {} end |
.shutdown!(instances) ⇒ Object
107 108 109 110 111 112 113 114 |
# File 'lib/legion/provider.rb', line 107 def shutdown!(instances) instances.reverse_each do |instance| instance.shutdown Legion::Readiness.mark_not_ready(instance.name) if defined?(Legion::Readiness) rescue StandardError => e Legion::Logging.warn "Provider shutdown error for #{instance.name}: #{e.}" if defined?(Legion::Logging) end end |