Class: Bigcommerce::Prometheus::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/bigcommerce/prometheus/server.rb

Overview

Server implementation for Prometheus

Instance Method Summary collapse

Constructor Details

#initialize(host: nil, port: nil, timeout: nil, prefix: nil, logger: nil) ⇒ Server

Returns a new instance of Server.

Parameters:

  • host (String) (defaults to: nil)
  • port (Integer) (defaults to: nil)
  • timeout (Integer) (defaults to: nil)
  • prefix (String) (defaults to: nil)


30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/bigcommerce/prometheus/server.rb', line 30

def initialize(host: nil, port: nil, timeout: nil, prefix: nil, logger: 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)
  @running = false
  ::PrometheusExporter::Metric::Base.default_prefix = @prefix
  setup_signal_handlers
end

Instance Method Details

#add_type_collector(collector) ⇒ Object

Add a type collector to this server

Parameters:

  • collector (PrometheusExporter::Server::TypeCollector)


99
100
101
102
# File 'lib/bigcommerce/prometheus/server.rb', line 99

def add_type_collector(collector)
  @logger.info "[bigcommerce-prometheus][#{@process_name}] Registering collector #{collector&.type}"
  @server.add_type_collector(collector)
end

#running?Boolean

Whether or not the server is running

Returns:

  • (Boolean)


90
91
92
# File 'lib/bigcommerce/prometheus/server.rb', line 90

def running?
  @running
end

#startObject

Start the server



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/bigcommerce/prometheus/server.rb', line 46

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}"

  @server
rescue ::StandardError => e
  @logger.error "[bigcommerce-prometheus][#{@process_name}] Failed to start exporter: #{e.message}"
  stop
end

#start_until_stoppedObject

Start the server and run it until stopped



65
66
67
68
69
70
71
# File 'lib/bigcommerce/prometheus/server.rb', line 65

def start_until_stopped
  start
  yield
  @run_thread.join
rescue StandardError => e
  @logger.error "[bigcommerce-prometheus] Server crashed: #{e.message}"
end

#stopObject

Stop the server



76
77
78
79
80
81
82
83
# File 'lib/bigcommerce/prometheus/server.rb', line 76

def stop
  @server.stop!
  @run_thread.kill
  @running = false
  @logger.info "[bigcommerce-prometheus][#{@process_name}] Prometheus exporter cleanly shut down"
rescue ::StandardError => e
  @logger.error "[bigcommerce-prometheus][#{@process_name}] Failed to stop exporter: #{e.message}"
end