class ImageServer::Spawner

Attributes

configuration[RW]
pid[RW]
server[RW]
started[RW]

Public Class Methods

new(configuration: ImageServer.configuration) click to toggle source
# File lib/image_server/spawner.rb, line 8
def initialize(configuration: ImageServer.configuration)
  @configuration = configuration
end

Public Instance Methods

give_feedback() click to toggle source
# File lib/image_server/spawner.rb, line 40
def give_feedback
  logger.info("image server is starting on port #{configuration.port}...") while starting
  logger.info "image server took #{seconds} seconds to start"
end
kill_at_exit() click to toggle source
# File lib/image_server/spawner.rb, line 31
def kill_at_exit
  at_exit do
    if pid
      logger.info 'image server is stopping'
      `pkill -TERM -P #{pid}` # also stops child processes
    end
  end
end
seconds() click to toggle source
# File lib/image_server/spawner.rb, line 45
def seconds
  '%.3f' % (Time.now - started)
end
start() click to toggle source
# File lib/image_server/spawner.rb, line 12
def start
  unless started?
    self.started = Time.now
    self.pid = fork do
      $stderr.reopen('/dev/null')
      $stdout.reopen('/dev/null')
      server_exec.run
    end
    kill_at_exit
    give_feedback
  end
end
started?() click to toggle source
# File lib/image_server/spawner.rb, line 25
def started?
  Net::HTTP.get_response(URI.parse("#{configuration.upload_host}:#{configuration.port}/status_check"))
rescue StandardError
  nil
end
starting() click to toggle source
# File lib/image_server/spawner.rb, line 49
def starting
  response = started?
  return false unless response
  raise 'Unable to start image server' unless response.kind_of?(Net::HTTPSuccess)
  false
rescue Errno::ECONNREFUSED
  true
end

Private Instance Methods

logger() click to toggle source
# File lib/image_server/spawner.rb, line 66
def logger
  @@logger ||= ImageServer::Logger.new
end
server_exec() click to toggle source
# File lib/image_server/spawner.rb, line 60
def server_exec
  log_file = File.join(configuration.log_directory, 'image_server.log')
  error_file = File.join(configuration.log_directory, 'image_server_errors.log')
  exec("#{configuration.path_to_binary} --port=#{configuration.port} --outputs='' server > #{log_file} 2> #{error_file}")
end