Class: OpenTelemetry::Propagator::B3::Multi::TextMapExtractor
- Inherits:
-
Object
- Object
- OpenTelemetry::Propagator::B3::Multi::TextMapExtractor
- 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
-
#extract(carrier, context, &getter) {|Carrier, String| ... } ⇒ Context
Extract b3 context from the supplied carrier and set the active span in the given context.
-
#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
constructor
Returns a new TextMapExtractor that extracts b3 context using the specified header keys.
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
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.
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 |