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