module Datadog::OpenTracer::RackPropagator

OpenTracing propagator for Datadog::OpenTracer::Tracer

Constants

BAGGAGE_PREFIX
BAGGAGE_PREFIX_FORMATTED

Public Class Methods

extract(carrier) click to toggle source

Extract a SpanContext in Rack format from the given carrier.

@param carrier [Carrier] A carrier object of Rack type @return [SpanContext, nil] the extracted SpanContext or nil if none could be found

# File lib/ddtrace/opentracer/rack_propagator.rb, line 35
def extract(carrier)
  # First extract & build a Datadog context
  datadog_context = Datadog::HTTPPropagator.extract(carrier)

  # Then extract any other baggage
  baggage = {}
  carrier.each do |key, value|
    baggage[header_to_baggage(key)] = value if baggage_header?(key)
  end

  SpanContextFactory.build(datadog_context: datadog_context, baggage: baggage)
end
inject(span_context, carrier) click to toggle source

Inject a SpanContext into the given carrier

@param span_context [SpanContext] @param carrier [Carrier] A carrier object of Rack type

# File lib/ddtrace/opentracer/rack_propagator.rb, line 19
def inject(span_context, carrier)
  # Inject Datadog trace properties
  Datadog::HTTPPropagator.inject!(span_context.datadog_context, carrier)

  # Inject baggage
  span_context.baggage.each do |key, value|
    carrier[BAGGAGE_PREFIX + key] = value
  end

  nil
end

Private Class Methods

baggage_header?(header) click to toggle source
# File lib/ddtrace/opentracer/rack_propagator.rb, line 50
def baggage_header?(header)
  header.to_s.start_with?(BAGGAGE_PREFIX_FORMATTED)
end
header_to_baggage(key) click to toggle source
# File lib/ddtrace/opentracer/rack_propagator.rb, line 54
def header_to_baggage(key)
  key[BAGGAGE_PREFIX_FORMATTED.length, key.length].downcase
end