Class: OpenTelemetry::Propagator::B3::Multi::TextMapExtractor

Inherits:
Object
  • Object
show all
Includes:
Context::Propagation::DefaultGetter
Defined in:
lib/opentelemetry/propagator/b3/multi/text_map_extractor.rb

Overview

Extracts context from carriers in the b3 single header format

Instance Method Summary collapse

Constructor Details

#initialize(b3_trace_id_key: 'X-B3-TraceId', b3_span_id_key: 'X-B3-SpanId', b3_sampled_key: 'X-B3-Sampled', b3_flags_key: 'X-B3-Flags') ⇒ TextMapExtractor

Returns a new TextMapExtractor that extracts b3 context using the specified header keys

Parameters:

  • b3_trace_id_key (String) (defaults to: 'X-B3-TraceId')

    The b3 trace id key used in the carrier

  • b3_span_id_key (String) (defaults to: 'X-B3-SpanId')

    The b3 span id key used in the carrier

  • b3_sampled_key (String) (defaults to: 'X-B3-Sampled')

    The b3 sampled key used in the carrier

  • b3_flags_key (String) (defaults to: 'X-B3-Flags')

    The b3 flags key used in the carrier



38
39
40
41
42
43
44
45
46
# File 'lib/opentelemetry/propagator/b3/multi/text_map_extractor.rb', line 38

def initialize(b3_trace_id_key: 'X-B3-TraceId',
               b3_span_id_key: 'X-B3-SpanId',
               b3_sampled_key: 'X-B3-Sampled',
               b3_flags_key: 'X-B3-Flags')
  @b3_trace_id_key = b3_trace_id_key
  @b3_span_id_key = b3_span_id_key
  @b3_sampled_key = b3_sampled_key
  @b3_flags_key = b3_flags_key
end

Instance Method Details

#extract(carrier, context, &getter) {|Carrier, String| ... } ⇒ Context

Extract b3 context from the supplied carrier and set the active span in the given context. The original context will be returned if b3 cannot be extracted from the carrier.

Parameters:

  • carrier (Carrier)

    The carrier to get the header from.

  • context (Context)

    The context to be updated with extracted context

  • getter (optional Callable)

    An optional callable that takes a carrier and a key and returns the value associated with the key. If omitted the default getter will be used which expects the carrier to respond to [] and []=.

Yields:

  • (Carrier, String)

    if an optional getter is provided, extract will yield the carrier and the header key to the getter.

Returns:

  • (Context)

    Updated context with active span derived from the header, or the original context if parsing fails.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/opentelemetry/propagator/b3/multi/text_map_extractor.rb', line 61

def extract(carrier, context, &getter)
  getter ||= default_getter

  trace_id_hex = getter.call(carrier, @b3_trace_id_key)
  return context unless valid_trace_id?(trace_id_hex)

  span_id_hex = getter.call(carrier, @b3_span_id_key)
  return context unless valid_span_id?(span_id_hex)

  sampled = getter.call(carrier, @b3_sampled_key)
  flags = getter.call(carrier, @b3_flags_key)

  context = B3.context_with_debug(context) if flags == DEBUG_FLAG

  span_context = Trace::SpanContext.new(
    trace_id: B3.to_trace_id(trace_id_hex),
    span_id: B3.to_span_id(span_id_hex),
    trace_flags: to_trace_flags(sampled, flags),
    remote: true
  )

  span = Trace::Span.new(span_context: span_context)
  Trace.context_with_span(span, parent_context: context)
rescue OpenTelemetry::Error
  context
end