Class: BrainzLab::Instrumentation::FaradayMiddleware::Middleware

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/brainzlab/instrumentation/faraday.rb

Overview

Faraday middleware for HTTP request instrumentation Usage:

conn = Faraday.new do |f|
  f.use :brainzlab
  # or
  f.use BrainzLab::Instrumentation::FaradayMiddleware::Middleware
end

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Middleware

Returns a new instance of Middleware.



37
38
39
40
# File 'lib/brainzlab/instrumentation/faraday.rb', line 37

def initialize(app, options = {})
  super(app)
  @options = options
end

Instance Method Details

#call(env) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/brainzlab/instrumentation/faraday.rb', line 42

def call(env)
  return @app.call(env) unless should_track?(env)

  # Inject distributed tracing context
  inject_trace_context(env)

  started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)

  begin
    response = @app.call(env)
    track_request(env, response.status, started_at)
    response
  rescue ::Faraday::Error => e
    error_info = e.class.name
    track_request(env, e.response&.dig(:status), started_at, error_info)
    raise
  rescue StandardError => e
    error_info = e.class.name
    track_request(env, nil, started_at, error_info)
    raise
  end
end