class Bigcommerce::Prometheus::Servers::Thin::RackApp
Handles metrics requests as a Rack App on the Thin
server
Public Class Methods
new(collector: nil, timeout: nil, logger: nil)
click to toggle source
# File lib/bigcommerce/prometheus/servers/thin/rack_app.rb, line 28 def initialize(collector: nil, timeout: nil, logger: nil) @timeout = timeout || ::Bigcommerce::Prometheus.server_timeout @collector = collector || ::PrometheusExporter::Server::Collector.new @logger = logger || ::Bigcommerce::Prometheus.logger @server_metrics = ::Bigcommerce::Prometheus::Servers::Thin::ServerMetrics.new(logger: @logger) end
Public Instance Methods
add_type_collector(collector)
click to toggle source
Add a type collector to this server
@param [PrometheusExporter::Server::TypeCollector] collector
# File lib/bigcommerce/prometheus/servers/thin/rack_app.rb, line 50 def add_type_collector(collector) @collector.register_collector(collector) end
call(env)
click to toggle source
# File lib/bigcommerce/prometheus/servers/thin/rack_app.rb, line 35 def call(env) request = ::Rack::Request.new(env) response = ::Rack::Response.new controller = route(request) handle(controller: controller, request: request, response: response) rescue StandardError => e @logger.error "Error: #{e.message}" handle(controller: ::Bigcommerce::Prometheus::Servers::Thin::Controllers::ErrorController, request: request, response: response) end
Private Instance Methods
handle(controller:, request:, response:)
click to toggle source
Handle a controller request
# File lib/bigcommerce/prometheus/servers/thin/rack_app.rb, line 74 def handle(controller:, request:, response:) con = controller.new( request: request, response: response, server_metrics: @server_metrics, collector: @collector, logger: @logger ) con.handle end
route(request)
click to toggle source
Determine the controller route
@param [Rack::Request] request
# File lib/bigcommerce/prometheus/servers/thin/rack_app.rb, line 61 def route(request) if request.fullpath == '/metrics' && request.request_method.to_s.downcase == 'get' Bigcommerce::Prometheus::Servers::Thin::Controllers::MetricsController elsif request.fullpath == '/send-metrics' && request.request_method.to_s.downcase == 'post' Bigcommerce::Prometheus::Servers::Thin::Controllers::SendMetricsController else Bigcommerce::Prometheus::Servers::Thin::Controllers::NotFoundController end end