class Bigcommerce::Prometheus::Servers::Thin::Controllers::MetricsController
GET /metrics
Public Instance Methods
call()
click to toggle source
Handle outputting of metrics
# File lib/bigcommerce/prometheus/servers/thin/controllers/metrics_controller.rb, line 34 def call collected_metrics = metrics if @request.accept_encoding.to_s.include?('gzip') write_gzip(metrics) else @response.write(collected_metrics) end @response end
Private Instance Methods
metrics()
click to toggle source
Gather all metrics
# File lib/bigcommerce/prometheus/servers/thin/controllers/metrics_controller.rb, line 64 def metrics metric_text = '' working = true begin ::Timeout.timeout(@timeout) do metric_text = @collector.prometheus_metrics_text end rescue ::Timeout::Error working = false @logger.error 'Generating Prometheus metrics text timed out' end output = [] output << @server_metrics.to_prometheus_text(working: working) output << metric_text output.join("\n") end
write_gzip(metrics)
click to toggle source
Output via gzip
# File lib/bigcommerce/prometheus/servers/thin/controllers/metrics_controller.rb, line 49 def write_gzip(metrics) sio = ::StringIO.new begin writer = ::Zlib::GzipWriter.new(sio) writer.write(metrics) ensure writer.close end @response.body << sio.string set_header('Content-Encoding', 'gzip') end