Class: Bigcommerce::Prometheus::Client
- Inherits:
-
PrometheusExporter::Client
- Object
- PrometheusExporter::Client
- Bigcommerce::Prometheus::Client
- Includes:
- Loggable, Singleton
- Defined in:
- lib/bigcommerce/prometheus/client.rb
Overview
Client implementation for Prometheus
Instance Method Summary collapse
-
#close_socket_if_old! ⇒ Object
Patch the close socket command to handle when @socket_started is nil.
-
#initialize(host: nil, port: nil, max_queue_size: nil, thread_sleep: nil, custom_labels: nil, process_name: nil) ⇒ Client
constructor
A new instance of Client.
-
#process_queue ⇒ Object
Process the current queue and flush to the collector.
- #uri_path(path) ⇒ Module<URI>
-
#worker_loop ⇒ Object
Patch the worker loop to make it more resilient.
Methods included from Loggable
Constructor Details
#initialize(host: nil, port: nil, max_queue_size: nil, thread_sleep: nil, custom_labels: nil, process_name: nil) ⇒ Client
Returns a new instance of Client.
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/bigcommerce/prometheus/client.rb', line 35 def initialize(host: nil, port: nil, max_queue_size: nil, thread_sleep: nil, custom_labels: nil, process_name: nil) super( host: host || Bigcommerce::Prometheus.server_host, port: port || Bigcommerce::Prometheus.server_port, max_queue_size: max_queue_size || Bigcommerce::Prometheus.client_max_queue_size, thread_sleep: thread_sleep || Bigcommerce::Prometheus.client_thread_sleep, custom_labels: custom_labels || Bigcommerce::Prometheus.client_custom_labels ) PrometheusExporter::Client.default = self @process_name = process_name || ::Bigcommerce::Prometheus.process_name end |
Instance Method Details
#close_socket_if_old! ⇒ Object
Patch the close socket command to handle when @socket_started is nil
60 61 62 |
# File 'lib/bigcommerce/prometheus/client.rb', line 60 def close_socket_if_old! close_socket! if @socket && ((@socket_started.to_i + MAX_SOCKET_AGE) < Time.now.to_f) end |
#process_queue ⇒ Object
Process the current queue and flush to the collector
75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bigcommerce/prometheus/client.rb', line 75 def process_queue while @queue.length.to_i.positive? begin = @queue.pop Net::HTTP.post(uri_path('/send-metrics'), ) rescue StandardError => e logger.warn "[bigcommerce-prometheus][#{@process_name}] Prometheus Exporter is dropping a message to #{uri_path('/send-metrics')}: #{e}" raise end end end |
#uri_path(path) ⇒ Module<URI>
68 69 70 |
# File 'lib/bigcommerce/prometheus/client.rb', line 68 def uri_path(path) URI("http://#{@host}:#{@port}#{path}") end |
#worker_loop ⇒ Object
Patch the worker loop to make it more resilient
50 51 52 53 54 55 |
# File 'lib/bigcommerce/prometheus/client.rb', line 50 def worker_loop close_socket_if_old! process_queue rescue StandardError => e logger.warn "[bigcommerce-prometheus][#{@process_name}] Prometheus client failed to send message to #{@host}:#{@port} #{e} - #{e.backtrace[0..5].join("\n")}" end |