class Talkshow::Daemon
Attributes
port_requests[RW]
processes[RW]
thread[RW]
Public Class Methods
new()
click to toggle source
Create a new Talkshow
object to get going
# File lib/talkshow/daemon.rb, line 18 def initialize Dir.mkdir './logs' if !Dir.exists?('./logs') Dir.mkdir './pids' if !Dir.exists?('./pids') @processes = {} @port_requests = ::Queue.new end
Public Instance Methods
check_processes()
click to toggle source
# File lib/talkshow/daemon.rb, line 92 def check_processes() @processes.each do |port, status| @processes[port] = check_status(port) end end
check_status(port)
click to toggle source
# File lib/talkshow/daemon.rb, line 74 def check_status(port) uri = URI.parse("http://localhost:#{port}/status") begin response = Net::HTTP.get_response(uri) rescue status = 'dead' end if !status if response.code.to_i == 200 status = 'ok' else status = "dead #{response.code}" end end status end
deal_with_port_requests()
click to toggle source
# File lib/talkshow/daemon.rb, line 49 def deal_with_port_requests begin port = @port_requests.pop(true) rescue port = nil end if port if @processes[port] puts "Port request -- checking aliveness" if check_status(port) == 'dead' @processes[port] = spawn_process(port) end else puts "New port request" @processes[port] = spawn_process(port) end end end
run()
click to toggle source
# File lib/talkshow/daemon.rb, line 40 def run self.start_server loop do deal_with_port_requests sleep 5 check_processes end end
spawn_process(port)
click to toggle source
# File lib/talkshow/daemon.rb, line 68 def spawn_process(port) `TALKSHOW_PORT=#{port} bundle exec ./bin/talkshow_server.rb > logs/talkshow.#{port}.log 2>&1 &` sleep 5 'starting' end
start_server()
click to toggle source
# File lib/talkshow/daemon.rb, line 25 def start_server @thread = Thread.new do Talkshow::WebControl.port_requests(@port_requests) Talkshow::WebControl.processes(@processes) Talkshow::WebControl.run! end p @thread sleep 10 end
stop_server()
click to toggle source
Stop the webserver
# File lib/talkshow/daemon.rb, line 36 def stop_server @thread.exit end