Sha256: aa50cde2807857d10e78aa27e0479f3c1146c9cc6b2f1519b0287ebde6a46372

Contents?: true

Size: 1.55 KB

Versions: 3

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
  module Instrumentation
    module HTTP
      module Patches
        # Module to prepend to HTTP::Client for instrumentation
        module Client
          def perform(req, options) # rubocop:disable Metrics/AbcSize
            uri = req.uri
            request_method = req.verb.to_s.upcase

            attributes = {
              'http.method' => request_method,
              'http.scheme' => uri.scheme,
              'http.target' => uri.path,
              'http.url' => "#{uri.scheme}://#{uri.host}",
              'peer.hostname' => uri.host,
              'peer.port' => uri.port
            }.merge(OpenTelemetry::Common::HTTP::ClientContext.attributes)

            tracer.in_span("HTTP #{request_method}", attributes: attributes, kind: :client) do |span|
              OpenTelemetry.propagation.inject(req.headers)
              super.tap do |response|
                annotate_span_with_response!(span, response)
              end
            end
          end

          private

          def annotate_span_with_response!(span, response)
            return unless response&.status

            status_code = response.status.to_i
            span.set_attribute('http.status_code', status_code)
            span.status = OpenTelemetry::Trace::Status.error unless (100..399).include?(status_code.to_i)
          end

          def tracer
            HTTP::Instrumentation.instance.tracer
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
opentelemetry-instrumentation-http-0.19.2 lib/opentelemetry/instrumentation/http/patches/client.rb
opentelemetry-instrumentation-http-0.19.1 lib/opentelemetry/instrumentation/http/patches/client.rb
opentelemetry-instrumentation-http-0.19.0 lib/opentelemetry/instrumentation/http/patches/client.rb