class EpsagonFaradayMiddleware

Faraday middleware for epsagon instrumentaton

Constants

HTTP_METHODS_SYMBOL_TO_STRING

Attributes

app[R]

Public Instance Methods

call(env) click to toggle source
# File lib/instrumentation/epsagon_faraday_middleware.rb, line 26
def call(env)
  http_method = HTTP_METHODS_SYMBOL_TO_STRING[env.method]
  path, path_params = env.url.path.split(';')

  attributes = {
    'type' => 'http',
    'operation' => http_method,
    'http.scheme' => env.url.scheme,
    'http.request.path' => path
  }

  unless config[:epsagon][:metadata_only]
    attributes.merge!(Util.epsagon_query_attributes(env.url.query))
    attributes.merge!({
      'http.request.path_params' => path_params,
      'http.request.headers' => Hash[env.request_headers],
      'http.request.body' => env.body,
      'http.request.headers.User-Agent' => env.request_headers['User-Agent']
    })
  end

  tracer.in_span(
    env.url.host,
    attributes: attributes,
    kind: :client
  ) do |span|
    OpenTelemetry.propagation.http.inject(env.request_headers)

    app.call(env).on_complete { |req| trace_response(span, req.response) }
  end
end
config() click to toggle source
# File lib/instrumentation/epsagon_faraday_middleware.rb, line 10
def config
  EpsagonFaradayInstrumentation.instance.config
end

Private Instance Methods

trace_response(span, response) click to toggle source
# File lib/instrumentation/epsagon_faraday_middleware.rb, line 66
def trace_response(span, response)
  span.set_attribute('http.status_code', response.status)

  unless config[:epsagon][:metadata_only]
    span.set_attribute('http.response.headers', Hash[env.response.headers])
    span.set_attribute('http.response.body', response.body)
  end
  span.status = OpenTelemetry::Trace::Status.http_to_status(
    response.status
  )
end
tracer() click to toggle source
# File lib/instrumentation/epsagon_faraday_middleware.rb, line 62
def tracer
  EpsagonFaradayInstrumentation.instance.tracer
end