Sha256: ab852d0b784a3eafac4038dfb2a1bd1a875ab3de56c3c2027bb60d75de328041
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true require "faraday" require "prometheus_aggregator" module PrometheusAggregator class FaradayMiddleware < Faraday::Middleware def initialize(app, options = {}) super(app) @client = options[:client] raise ArgumentError, ":client option is required" unless @client end 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 def labels(response_env) { method: response_env[:method].to_s, host: response_env[:url].host } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
prometheus_aggregator-1.0.0 | lib/prometheus_aggregator/faraday_middleware.rb |
prometheus_aggregator-0.2.0 | lib/prometheus_aggregator/faraday_middleware.rb |