class Bigcommerce::Prometheus::Server
Server
implementation for Prometheus
Public Class Methods
new(host: nil, port: nil, timeout: nil, prefix: nil, logger: nil, thread_pool_size: nil)
click to toggle source
@param [String] host @param [Integer] port @param [Integer] timeout @param [String] prefix @param [Integer] thread_pool_size
# File lib/bigcommerce/prometheus/server.rb, line 31 def initialize(host: nil, port: nil, timeout: nil, prefix: nil, logger: nil, thread_pool_size: nil) @host = host || ::Bigcommerce::Prometheus.server_host @port = (port || ::Bigcommerce::Prometheus.server_port).to_i @timeout = (timeout || ::Bigcommerce::Prometheus.server_timeout).to_i @prefix = (prefix || ::PrometheusExporter::DEFAULT_PREFIX).to_s @process_name = ::Bigcommerce::Prometheus.process_name @logger = logger || ::Bigcommerce::Prometheus.logger @server = ::Bigcommerce::Prometheus::Servers::Thin::Server.new( port: @port, timeout: @timeout, logger: @logger, thread_pool_size: (thread_pool_size || ::Bigcommerce::Prometheus.server_thread_pool_size).to_i ) @running = false ::PrometheusExporter::Metric::Base.default_prefix = @prefix setup_signal_handlers 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/server.rb, line 106 def add_type_collector(collector) @logger.info "[bigcommerce-prometheus][#{@process_name}] Registering collector #{collector&.type}" @server.add_type_collector(collector) end
running?()
click to toggle source
Whether or not the server is running
@return [Boolean]
# File lib/bigcommerce/prometheus/server.rb, line 97 def running? @running end
start()
click to toggle source
Start the server
# File lib/bigcommerce/prometheus/server.rb, line 52 def start @logger.info "[bigcommerce-prometheus][#{@process_name}] Starting prometheus exporter on port #{@host}:#{@port}" @run_thread = ::Thread.start do @server.start end @running = true @logger.info "[bigcommerce-prometheus][#{@process_name}] Prometheus exporter started on #{@host}:#{@port} with #{@server.threadpool_size} threads" @server rescue ::StandardError => e @logger.error "[bigcommerce-prometheus][#{@process_name}] Failed to start exporter: #{e.message}" stop end
start_until_stopped() { || ... }
click to toggle source
Start the server and run it until stopped
# File lib/bigcommerce/prometheus/server.rb, line 71 def start_until_stopped start yield @run_thread.join rescue StandardError => e warn "[bigcommerce-prometheus] Server crashed: #{e.message}" stop end
stop()
click to toggle source
Stop the server
# File lib/bigcommerce/prometheus/server.rb, line 83 def stop @server.stop! @run_thread.kill @running = false $stdout.puts "[bigcommerce-prometheus][#{@process_name}] Prometheus exporter cleanly shut down" rescue ::StandardError => e warn "[bigcommerce-prometheus][#{@process_name}] Failed to stop exporter: #{e.message}" end
Private Instance Methods
setup_signal_handlers()
click to toggle source
Register signal handlers
:nocov:
# File lib/bigcommerce/prometheus/server.rb, line 117 def setup_signal_handlers ::Signal.trap('INT', proc { stop }) ::Signal.trap('TERM', proc { stop }) end