class PrometheusAggregator::FaradayMiddleware
Public Class Methods
new(app, options = {})
click to toggle source
Calls superclass method
# File lib/prometheus_aggregator/faraday_middleware.rb, line 8 def initialize(app, options = {}) super(app) @client = options[:client] raise ArgumentError, ":client option is required" unless @client end
Public Instance Methods
call(request_env)
click to toggle source
# File lib/prometheus_aggregator/faraday_middleware.rb, line 14 def call(request_env) start_time = Time.now @app.call(request_env).on_complete do |response_env| duration = Time.now - start_time status_code = response_env[:status].to_s begin @client.counter( name: "http_client_requests_total", help: "The total number of HTTP requests sent by the client", value: 1, labels: labels(response_env).merge(code: status_code) ) @client.histogram( name: "http_client_request_duration_seconds", help: "The HTTP response duration", value: duration, labels: labels(response_env) ) rescue => err # rubocop:disable Style/RescueStandardError # Let's be ultra defensive. Metrics should never break the app. PrometheusAggregator.logger.error("FaradayMiddleware: #{err}") end end end
Private Instance Methods
labels(response_env)
click to toggle source
# File lib/prometheus_aggregator/faraday_middleware.rb, line 43 def labels(response_env) { method: response_env[:method].to_s, host: response_env[:url].host } end