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',
  debug: ENV['DEBUG']
}.freeze

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Server.



35
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
# File 'lib/upfluence/http/server.rb', line 35

def initialize(options = {}, &block)
  @options = DEFAULT_OPTIONS.dup.merge(options)
  opts = @options
  base_handler = Handler::Base.new(opts[:interfaces])

  @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

    map '/base' do
      run_thrift Base::Base_service::BaseService::Processor, base_handler
    end

    map '/debug' do
      run Endpoint::Profiler.new
    end if opts[:debug]

    instance_eval(&block)
  end

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

Instance Method Details

#serveObject



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/upfluence/http/server.rb', line 71

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