class OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware

TracerMiddleware propagates context and instruments Faraday requests by way of its middlware system

Constants

HTTP_METHODS_SYMBOL_TO_STRING

Attributes

app[R]

Public Instance Methods

call(env) click to toggle source
# File lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb, line 26
def call(env)
  http_method = HTTP_METHODS_SYMBOL_TO_STRING[env.method]
  attributes = span_creation_attributes(
    http_method: http_method, url: env.url
  )
  tracer.in_span(
    "HTTP #{http_method}", attributes: attributes, kind: :client
  ) do |span|
    OpenTelemetry.propagation.inject(env.request_headers)

    app.call(env).on_complete { |resp| trace_response(span, resp) }
  end
end

Private Instance Methods

span_creation_attributes(http_method:, url:) click to toggle source
# File lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb, line 44
def span_creation_attributes(http_method:, url:)
  instrumentation_attrs = {
    'http.method' => http_method, 'http.url' => url.to_s
  }
  config = Faraday::Instrumentation.instance.config
  instrumentation_attrs['peer.service'] = config[:peer_service] if config[:peer_service]
  instrumentation_attrs.merge(
    OpenTelemetry::Common::HTTP::ClientContext.attributes
  )
end
trace_response(span, response) click to toggle source
# File lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb, line 59
def trace_response(span, response)
  span.set_attribute('http.status_code', response.status)
  span.status = OpenTelemetry::Trace::Status.error unless (100..399).include?(response.status.to_i)
end
tracer() click to toggle source
# File lib/opentelemetry/instrumentation/faraday/middlewares/tracer_middleware.rb, line 55
def tracer
  Faraday::Instrumentation.instance.tracer
end