Sha256: c43900a6b05a1dcd6c15fd82a9429a2e5c8901668af49346946aec84223f2a02

Contents?: true

Size: 1.54 KB

Versions: 40

Compression:

Stored size: 1.54 KB

Contents

require 'ddtrace/ext/distributed'
require 'ddtrace/distributed_tracing/headers/headers'
require 'ddtrace/distributed_tracing/headers/helpers'

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

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

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

          unless context.sampling_priority.nil?
            sampling_priority = DistributedTracing::Headers::Helpers.clamp_sampling_priority(context.sampling_priority)
            env[B3_HEADER_SAMPLED] = sampling_priority.to_s
          end
        end

        def self.extract(env)
          # Extract values from headers
          # DEV: B3 doesn't have "origin"
          headers = Headers.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

          ::Datadog::Context.new(trace_id: trace_id,
                                 span_id: span_id,
                                 sampling_priority: sampling_priority)
        end
      end
    end
  end
end

Version data entries

40 entries across 40 versions & 2 rubygems

Version Path
ddtrace-0.51.1 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.51.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.50.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.49.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.48.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.47.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.46.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.45.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.44.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.43.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.42.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.41.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.40.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.39.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.38.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.37.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.36.0 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.35.2 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.35.1 lib/ddtrace/distributed_tracing/headers/b3.rb
ddtrace-0.35.0 lib/ddtrace/distributed_tracing/headers/b3.rb