class Fluent::PluginHelper::HttpServer::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] This method must have call. @param tls_context [OpenSSL::SSL::SSLContext]

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

  # TODO: support http2
  scheme = tls_context ? 'https' : 'http'
  @uri = URI("#{scheme}://#{@addr}:#{@port}").to_s
  @router = Router.new(default_app)
  @reactor = Async::Reactor.new(nil, logger: Fluent::Log::ConsoleAdapter.wrap(@logger))

  opts = if tls_context
           { ssl_context: tls_context }
         else
           {}
         end
  @server = Async::HTTP::Server.new(App.new(@router, @logger), Async::HTTP::Endpoint.parse(@uri, **opts))

  if block_given?
    yield(self)
  end
end

Public Instance Methods

start(notify = nil) click to toggle source
# File lib/fluent/plugin_helper/http_server/server.rb, line 56
def start(notify = nil)
  @logger.debug("Start async HTTP server listening #{@uri}")
  task = @reactor.run do
    @server.run

    if notify
      notify.push(:ready)
    end
  end

  task.stop
  @logger.debug('Finished HTTP server')
end
stop() click to toggle source
# File lib/fluent/plugin_helper/http_server/server.rb, line 70
def stop
  @logger.debug('closing HTTP server')

  if @reactor
    @reactor.stop
  end
end