class ProcessHost::Host
Constants
- NameConflictError
Public Class Methods
build()
click to toggle source
# File lib/process_host/host.rb, line 8 def self.build instance = new Signal.configure instance instance.send = Actor::Messaging::Send instance end
Public Instance Methods
log_observer()
click to toggle source
# File lib/process_host/host.rb, line 99 def log_observer @log_observer ||= SupervisorObservers::Log.new end
processes()
click to toggle source
# File lib/process_host/host.rb, line 103 def processes @processes ||= {} end
record_error(&block)
click to toggle source
# File lib/process_host/host.rb, line 35 def record_error(&block) record_errors_observer.record_error_proc = block end
record_errors_observer()
click to toggle source
# File lib/process_host/host.rb, line 95 def record_errors_observer @record_errors_observer ||= SupervisorObservers::RecordErrors.new end
register(process_class, process_name=nil)
click to toggle source
# File lib/process_host/host.rb, line 15 def register(process_class, process_name=nil) logger.trace { "Registering process (ProcessClass: #{process_class}, Name: #{process_name.inspect})" } process_name ||= process_class.process_name if registered_process = processes[process_name] error_message = "Process with specified name is already registered (ProcessClass: #{process_class}, Name: #{process_name.inspect}, RegisteredProcessClass: #{registered_process.name})" logger.error error_message raise NameConflictError, error_message else processes[process_name] = process_class end logger.debug { "Process registered (ProcessClass: #{process_class}, Name: #{process_name.inspect})" } process_name end
start(&block)
click to toggle source
# File lib/process_host/host.rb, line 39 def start(&block) started_processes = [] 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 { "Handled TSTP signal (MessageName: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end signal.trap 'CONT' do message = Actor::Messages::Resume send.(message, supervisor.address) logger.info { "Handled CONT signal (MessageName: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end signal.trap 'INT' do message = Actor::Messages::Shutdown send.(message, supervisor.address) logger.info { "Handled INT signal (MessageName: #{message.message_name}, SupervisorAddress: #{supervisor.address.id})" } end start_processes do |process| started_processes << process end block.(supervisor) if block end started_processes end
start_processes(&block)
click to toggle source
# File lib/process_host/host.rb, line 81 def start_processes(&block) processes.each_value do |process_class| process = process_class.build process.start block.(process) if block end rescue => error record_errors_observer.(error) raise error end