class ComponentHost::Host
Constants
- Component
Public Class Methods
build()
click to toggle source
# File lib/component_host/host.rb, line 9 def self.build instance = new Signal.configure instance instance.send = Actor::Messaging::Send instance end
Public Instance Methods
abort()
click to toggle source
# File lib/component_host/host.rb, line 117 def abort raise StopIteration end
components()
click to toggle source
# File lib/component_host/host.rb, line 113 def components @components ||= [] end
log_observer()
click to toggle source
# File lib/component_host/host.rb, line 109 def log_observer @log_observer ||= SupervisorObservers::Log.new end
record_error(&block)
click to toggle source
# File lib/component_host/host.rb, line 30 def record_error(&block) record_errors_observer.record_error_proc = block end
record_errors_observer()
click to toggle source
# File lib/component_host/host.rb, line 105 def record_errors_observer @record_errors_observer ||= SupervisorObservers::RecordErrors.new end
register(initiator, name=nil) { || ... }
click to toggle source
# File lib/component_host/host.rb, line 16 def register(initiator, name=nil, &block) initiator ||= proc { yield } logger.trace(tag: :component_host) { "Registering component (Component Initiator: #{initiator}, Name: #{name || '(none)'})" } component = Component.new initiator, name components << component logger.debug(tag: :component_host) { "Registered component (Component Initiator: #{initiator}, Name: #{name || '(none)'})" } component end
registered?(&block)
click to toggle source
# File lib/component_host/host.rb, line 121 def registered?(&block) block ||= proc { true } components.any? do |component| block.(component.initiator, component.name) end end
start(&probe)
click to toggle source
# File lib/component_host/host.rb, line 34 def start(&probe) started_components = [] Actor::Supervisor.start do |supervisor| supervisor.add_observer record_errors_observer supervisor.add_observer log_observer signal.trap 'TSTP' do message = Actor::Messages::Suspend send.(message, supervisor.address) logger.info(tags: [:*, :signal]) { "Handled TSTP signal (Message Name: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end signal.trap 'CONT' do message = Actor::Messages::Resume send.(message, supervisor.address) logger.info(tags: [:*, :signal]) { "Handled CONT signal (Message Name: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end signal.trap 'INT' do message = Actor::Messages::Shutdown send.(message, supervisor.address) logger.info(tags: [:*, :signal]) { "Handled INT signal (Message Name: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end signal.trap 'TERM' do message = Actor::Messages::Shutdown send.(message, supervisor.address) logger.info(tags: [:*, :signal]) { "Handled TERM signal (Message Name: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end start_components do |component| started_components << component end probe.(supervisor) if probe end started_components end
start_components(&block)
click to toggle source
# File lib/component_host/host.rb, line 84 def start_components(&block) components.each do |component| if ComponentHost::Defaults.startup_info? STDOUT.puts " Component: #{component.initiator} (Name: #{component.name || '(none)'})" end logger.trace(tags: [:component_host, :start]) { "Starting component: #{component.initiator} (Name: #{component.name || '(none)'})" } component.start logger.info(tags: [:component_host, :start]) { "Started component: #{component.initiator} (Name: #{component.name || '(none)'})" } block.(component) if block end rescue => error record_errors_observer.(error) logger.fatal(tags: [:*, :component_host, :start]) { "#{error.message} (Error: #{error.class})" } raise error end