Sha256: 5f403c1471c993aa33e7fbfc9613ce0aaf0dc9f015be7c12a359de74b52a9ffb

Contents?: true

Size: 1.9 KB

Versions: 1

Compression:

Stored size: 1.9 KB

Contents

class OpenTelemetry::Instrumentation::Faraday::Middlewares::TracerMiddleware < ::Faraday::Middleware
  def call(env)
    http_method = HTTP_METHODS_SYMBOL_TO_STRING[env.method]
    attributes = span_creation_attributes(
      http_method: http_method, url: env.url
    )
    request_headers = env.request_headers.to_h
    header_attrs = Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(request_headers,
                                                                                      Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)

    content_type = request_headers['Content-Type']
    if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_REQUEST)
      body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(env&.request_body&.to_s)
      attributes['http.request.body'] = body_cap if body_cap
    end

    attributes.merge!(header_attrs)
    tracer.in_span(
      "HTTP #{http_method}", attributes: attributes, kind: :client
    ) do |span|
      OpenTelemetry.propagation.inject(env.request_headers)

      app.call(env).on_complete do |resp|
        resp = Faraday::Response.new(resp)
        resp_headers = resp.headers.to_h
        Hypertrace::Instrumentation::DataCapture.headers_to_attribute_keys(resp_headers,
                                                                           Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE) do |k, v|
          span.set_attribute(k, v)
        end
        content_type = resp_headers['content-type']
        if Hypertrace::Instrumentation::DataCapture.can_capture?(content_type, Hypertrace::Instrumentation::DataCapture::TYPE_RESPONSE)
          body_cap = Hypertrace::Instrumentation::DataCapture.capturable_body(resp.body)
          span.set_attribute('http.response.body', body_cap) if body_cap
        end

        trace_response(span, resp)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hypertrace-agent-0.1.0 lib/hypertrace/instrumentation/faraday_patch.rb