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 36 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 20 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 51 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 55 def header_to_baggage(key) key[BAGGAGE_PREFIX_FORMATTED.length, key.length].downcase end