Sha256: 3023db8a4f9eec929b44217de17a946212bff9ebdada8ce94971d9756fdf9225

Contents?: true

Size: 1.66 KB

Versions: 3

Compression:

Stored size: 1.66 KB

Contents

# typed: true

require 'datadog/tracing/distributed/parser'
require 'datadog/tracing/distributed/helpers'
require 'datadog/tracing/distributed/headers/ext'
require 'datadog/tracing/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

3 entries across 3 versions & 1 rubygems

Version Path
ddtrace-1.1.0 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.0.0 lib/datadog/tracing/distributed/headers/b3.rb
ddtrace-1.0.0.beta2 lib/datadog/tracing/distributed/headers/b3.rb