class Fluent::PluginHelper::HttpServer::Compat::Server

Public Class Methods

new(addr:, port:, logger:, default_app: nil, tls_context: nil) { |self| ... } click to toggle source

@param logger [Logger] @param default_app [Object] ignored option. only for compat @param tls_context [OpenSSL::SSL::SSLContext]

# File lib/fluent/plugin_helper/http_server/compat/server.rb, line 29
def initialize(addr:, port:, logger:, default_app: nil, tls_context: nil)
  @addr = addr
  @port = port
  @logger = logger

  config = {
    BindAddress: @addr,
    Port: @port,
    Logger: WEBrick::Log.new(STDERR, WEBrick::Log::FATAL),
    AccessLog: [],
  }
  if tls_context
    require 'webrick/https'
    @logger.warn('Webrick ignores given TLS version')
    tls_opt = Fluent::PluginHelper::HttpServer::Compat::SSLContextExtractor.extract(tls_context)
    config = tls_opt.merge(**config)
  end

  @server = WEBrick::HTTPServer.new(config)

  # @example ["/example.json", :get, handler object]
  @methods = []

  if block_given?
    yield(self)
  end
end

Public Instance Methods

start(notify = nil) click to toggle source
# File lib/fluent/plugin_helper/http_server/compat/server.rb, line 57
def start(notify = nil)
  build_handler
  notify.push(:ready)
  @logger.debug('Start webrick HTTP server listening')
  @server.start
end
stop() click to toggle source
# File lib/fluent/plugin_helper/http_server/compat/server.rb, line 64
def stop
  @server.shutdown
  @server.stop
end

Private Instance Methods

build_handler() click to toggle source
# File lib/fluent/plugin_helper/http_server/compat/server.rb, line 82
def build_handler
  @methods.group_by(&:first).each do |(path, rest)|
    klass = Fluent::PluginHelper::HttpServer::Compat::WebrickHandler.build(**Hash[rest.map { |e| [e[1], e[2]] }])
    @server.mount(path, klass)
  end
end