Sha256: 7bd53960b61042db6a27f6e68428f17e6a1469250fce36e19a9de54dc67a3ba5

Contents?: true

Size: 1.59 KB

Versions: 9

Compression:

Stored size: 1.59 KB

Contents

# typed: true

require_relative 'parser'
require_relative '../helpers'
require_relative 'ext'
require_relative '../../trace_digest'

module Datadog
  module Tracing
    module Distributed
      module Headers
        # B3 provides helpers to inject or extract headers for B3 style headers
        module B3
          include Ext

          def self.inject!(digest, env)
            return if digest.nil?

            # DEV: We need these to be hex encoded
            env[B3_HEADER_TRACE_ID] = digest.trace_id.to_s(16)
            env[B3_HEADER_SPAN_ID] = digest.span_id.to_s(16)

            if digest.trace_sampling_priority
              sampling_priority = Helpers.clamp_sampling_priority(
                digest.trace_sampling_priority
              )
              env[B3_HEADER_SAMPLED] = sampling_priority.to_s
            end

            env
          end

          def self.extract(env)
            # Extract values from headers
            # DEV: B3 doesn't have "origin"
            headers = Parser.new(env)
            trace_id = headers.id(B3_HEADER_TRACE_ID, 16)
            span_id = headers.id(B3_HEADER_SPAN_ID, 16)
            # We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
            sampling_priority = headers.number(B3_HEADER_SAMPLED)

            # Return early if this propagation is not valid
            return unless trace_id && span_id

            TraceDigest.new(
              trace_id: trace_id,
              span_id: span_id,
              trace_sampling_priority: sampling_priority
            )
          end
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ddtrace-1.6.1 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.6.0 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.5.2 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.5.1 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.5.0 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.4.2 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.4.1 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.4.0 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.3.0 lib/datadog/tracing/distributed/headers/b3.rb