class Sponges::Commander
This class concern is to send messages to supervisor. It's used to send messages like 'stop' or 'restart'
Attributes
store[R]
Public Class Methods
new(name, options = {})
click to toggle source
# File lib/sponges/commander.rb, line 12 def initialize(name, options = {}) @name, @options = name, options @store = Sponges::Store.new(@name) end
Public Instance Methods
decrement()
click to toggle source
Decrement workers's pool by one.
# File lib/sponges/commander.rb, line 72 def decrement Sponges.logger.info "Runner #{@name} decrement message received." if supervisor_pid begin Process.kill :TTOU, supervisor_pid.to_i rescue Errno::ESRCH => e Sponges.logger.error e end else Sponges.logger.info "No supervisor found." end end
increment()
click to toggle source
Increment workers's pool by one.
# File lib/sponges/commander.rb, line 57 def increment Sponges.logger.info "Runner #{@name} increment message received." if pid = supervisor_pid begin Process.kill :TTIN, supervisor_pid.to_i rescue Errno::ESRCH => e Sponges.logger.error e end else Sponges.logger.info "No supervisor found." end end
kill()
click to toggle source
Kills the supervisor, and then all workers.
# File lib/sponges/commander.rb, line 19 def kill Sponges.logger.info "Runner #{@name} kill message received." stop :KILL children_pids.each do|pid| begin kill_process(:KILL, pid, "Worker") rescue Errno::ESRCH => e # Don't panic ensure store.delete_children pid end end end
stop(signal = nil)
click to toggle source
Stops supervisor, signal depends on options given by Boson.
# File lib/sponges/commander.rb, line 35 def stop(signal = nil) signal ||= gracefully? ? :HUP : :QUIT Sponges.logger.info "Runner #{@name} stop message received." if pid = supervisor_pid if @options[:timeout] begin Timeout::timeout(@options[:timeout]) do kill_process(signal, pid) end rescue Timeout::Error kill end else kill_process(signal, pid) end else Sponges.logger.info "No supervisor found." end end
Private Instance Methods
children_pids()
click to toggle source
# File lib/sponges/commander.rb, line 91 def children_pids @store.children_pids end
gracefully?()
click to toggle source
# File lib/sponges/commander.rb, line 109 def gracefully? !!@options[:gracefully] end
kill_process(signal, pid, type = "Supervisor")
click to toggle source
# File lib/sponges/commander.rb, line 95 def kill_process(signal, pid, type = "Supervisor") pid = pid.to_i begin Process.kill signal, pid while alive?(pid) do Sponges.logger.info "#{type} #{pid} still alive" sleep 0.5 end Sponges.logger.info "#{type} #{pid} has stopped." rescue Errno::ESRCH => e # Don't panic end end
supervisor_pid()
click to toggle source
# File lib/sponges/commander.rb, line 87 def supervisor_pid @store.supervisor_pid end