class Invoker::Commander
Attributes
event_manager[RW]
process_manager[RW]
reactor[RW]
runnables[RW]
thread_group[RW]
Public Class Methods
new()
click to toggle source
# File lib/invoker/commander.rb, line 19 def initialize @thread_group = ThreadGroup.new @runnable_mutex = Mutex.new @event_manager = Invoker::Event::Manager.new @runnables = [] @reactor = Invoker::Reactor.new @process_manager = Invoker::ProcessManager.new Thread.abort_on_exception = true end
Public Instance Methods
on_next_tick(*args, &block)
click to toggle source
# File lib/invoker/commander.rb, line 49 def on_next_tick(*args, &block) @runnable_mutex.synchronize do @runnables << OpenStruct.new(:args => args, :block => block) end end
run_runnables()
click to toggle source
# File lib/invoker/commander.rb, line 55 def run_runnables @runnables.each do |runnable| instance_exec(*runnable.args, &runnable.block) end @runnables = [] end
start_manager()
click to toggle source
Start the invoker process supervisor. This method starts a unix server in separate thread that listens for incoming commands.
# File lib/invoker/commander.rb, line 33 def start_manager verify_process_configuration daemonize_app if Invoker.daemonize? install_interrupt_handler unix_server_thread = Thread.new { Invoker::IPC::Server.new } @thread_group.add(unix_server_thread) process_manager.run_power_server Invoker.config.autorunnable_processes.each do |process_info| process_manager.start_process(process_info) Logger.puts("Starting process - #{process_info.label} waiting for #{process_info.sleep_duration} seconds...") sleep(process_info.sleep_duration) end at_exit { process_manager.kill_workers } start_event_loop end
Private Instance Methods
daemonize_app()
click to toggle source
# File lib/invoker/commander.rb, line 97 def daemonize_app Invoker.daemon.start end
install_interrupt_handler()
click to toggle source
# File lib/invoker/commander.rb, line 84 def install_interrupt_handler Signal.trap("INT") { Invoker::Logger.puts("Stopping invoker") process_manager.kill_workers exit(0) } Signal.trap("TERM") { Invoker::Logger.puts("Stopping invoker") process_manager.kill_workers exit(0) } end
run_scheduled_events()
click to toggle source
# File lib/invoker/commander.rb, line 78 def run_scheduled_events event_manager.run_scheduled_events do |event| event.block.call end end
start_event_loop()
click to toggle source
# File lib/invoker/commander.rb, line 70 def start_event_loop loop do reactor.monitor_for_fd_events run_runnables run_scheduled_events end end
verify_process_configuration()
click to toggle source
# File lib/invoker/commander.rb, line 64 def verify_process_configuration if !Invoker.config.processes || Invoker.config.processes.empty? raise Invoker::Errors::InvalidConfig.new("No processes configured in config file") end end