class Patriot::Worker::InfoServer

info server (web management console and for monitoring)

Constants

DEFAULT_PORT

default port number

DEFAULT_RACK_HANDLER

default rack handler DEFAULT_RACK_HANDLER = 'Rack::Handler::WEBrick'

PORT_KEY

configuratio key for port used by this server

RACK_HANDLER_KEY

configuration key for rack handler used to start this server

Attributes

port[RW]

Public Class Methods

new(worker, config) click to toggle source

@param worker [Patriot::Worker::Base] worker managed through this server @param config [Patriot::Util::Config::Bae]

# File lib/patriot/worker/info_server.rb, line 27
def initialize(worker, config)
  @logger = create_logger(config)
  @worker = worker
  @config = config
  @port = @config.get(Patriot::Worker::InfoServer::PORT_KEY,
                      Patriot::Worker::InfoServer::DEFAULT_PORT)
end

Public Instance Methods

get_url_map() click to toggle source

@return [Hash<String, Sinatra::Base>]

# File lib/patriot/worker/info_server.rb, line 72
def get_url_map
  urlmap = {"/" => Patriot::Worker::Servlet::IndexServlet,
            "/api/v1/jobs" => Patriot::Worker::Servlet::JobAPIServlet,
            "/api/v1/workers" => Patriot::Worker::Servlet::WorkerAPIServlet}
  urlmap.values.each{|servlet| servlet.configure(@worker, @config)}
  return urlmap
end
shutdown_server() click to toggle source

instruct to shutdown server

# File lib/patriot/worker/info_server.rb, line 87
def shutdown_server
  return false if @server.nil?
  unless @server_thread.nil?
    begin
      @handler.shutdown
      @logger.info "info server shutdowned"
    rescue => e
      @logger.error "failed to shutdown infoserver", e
      raise e
    end
  end
end
start_server() click to toggle source

start the server

# File lib/patriot/worker/info_server.rb, line 36
def start_server
  if @port.nil?
    @logger.info("port is not set. starting info server is skipped")
    return
  end
  @server_thread = Thread.new do
    begin
      @handler = eval(@config.get(RACK_HANDLER_KEY, DEFAULT_RACK_HANDLER))
      app = Rack::URLMap.new(get_url_map)
      app = Rack::CommonLogger.new(app, build_access_logger)
      app = Rack::Rewrite.new(app){
        # below 4 rules are for backward compatibility
        r301 %r{^/jobs/?$}, "/"
        rewrite %r{^/jobs/([^/]+)$}, "/api/v1/jobs/$1"
        rewrite "/worker", "/api/v1/workers/this/state"
        rewrite "/worker/status", "/api/v1/workers/this/state"
        # for web console
        rewrite %r{^(?!/api)}, "/"
      }
      app = Rack::Static.new(app, :urls => ["/js", "/css"], :root => File.join($home, "public"))
      # TODO set options based on Handler type
      @handler.run(app, {:Port => @port, :Host => '0.0.0.0', :signals => false}) do |server|
        server.threaded = true
        server.threadpool_size = 5
        server.timeout = 60
      end
    rescue => e
      @logger.error e
      raise e
    end
  end
  @logger.info "info server has started with #{@handler.class}"
  return true
end

Private Instance Methods

build_access_logger() click to toggle source
# File lib/patriot/worker/info_server.rb, line 80
def build_access_logger
  config = load_config(:path => @config.path, :type => 'web', :ignore_plugin => true)
  return Patriot::Util::Logger::Factory.create_logger(@hanlder.class.to_s, config)
end