Class: Upfluence::HTTP::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/upfluence/http/server.rb

Constant Summary collapse

DEFAULT_OPTIONS =
{
  server: :puma,
  Port: ENV['PORT'] || 8080,
  Host: '0.0.0.0',
  threaded: true,
  interfaces: [],
  push_gateway_url: ENV['PUSH_GATEWAY_URL'],
  push_gateway_interval: 15, # sec
  app_name: ENV['APP_NAME'] || 'uhttp-rb-server',
  unit_name: ENV['UNIT_NAME'] || 'uhttp-rb-server-anonymous',
  base_processor_klass: nil,
  base_handler_klass: nil,
  debug: ENV['DEBUG']
}

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, &block) ⇒ Server

Returns a new instance of Server.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/upfluence/http/server.rb', line 36

def initialize(options = {}, &block)
  @options = DEFAULT_OPTIONS.dup.merge(options)
  opts = @options
  base_handler = nil

  if opts[:base_handler_klass]
    base_handler = opts[:base_handler_klass].new(@options[:interfaces])
  end

  @builder = Builder.new do
    use Middleware::Logger
    use Middleware::Prometheus
    use Middleware::ApplicationHeaders, base_handler
    use Middleware::HandleException
    use Upfluence.error_logger.middleware
    use Rack::ContentLength
    use Rack::Chunked
    use Rack::Lint if Upfluence.env.development?
    use Rack::TempfileReaper
    use Rack::ETag
    use Middleware::CORS if Upfluence.env.development?

    map '/healthcheck' do
      run(opts[:healthcheck_endpoint] || Endpoint::Healthcheck.new)
    end

    if opts[:base_processor_klass] && base_handler
      map '/base' do
        run_thrift(opts[:base_processor_klass], base_handler)
      end
    end

    map('/debug') { run(Endpoint::Profiler.new) } if opts[:debug]

    instance_eval(&block)
  end

  @handler = Rack::Handler.get(@options[:server])
end

Instance Method Details

#serveObject



76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/upfluence/http/server.rb', line 76

def serve
  ENV['RACK_ENV'] = Upfluence.env.to_s

  Thread.new { run_prometheus_exporter } if @options[:push_gateway_url]

  @handler.run(@builder, **@options) do |server|
    server.threaded = @options[:threaded] if server.respond_to? :threaded=

    if server.respond_to?(:threadpool_size=) && @options[:threadpool_size]
      server.threadpool_size = @options[:threadpool_size]
    end
  end
end