Class: OpenTelemetry::Propagator::OTTrace::TextMapExtractor
- Inherits:
-
Object
- Object
- OpenTelemetry::Propagator::OTTrace::TextMapExtractor
- Defined in:
- lib/opentelemetry/propagator/ottrace/text_map_extractor.rb
Overview
Extracts context from carriers using OTTrace header format
Constant Summary collapse
- PADDING =
'0' * 16
- VALID_TRACE_ID_REGEX =
/^[0-9a-f]{32}$/.freeze
- VALID_SPAN_ID_REGEX =
/^[0-9a-f]{16}$/.freeze
Instance Method Summary collapse
-
#extract(carrier, context, getter = nil) ⇒ Context
Extract OTTrace context from the supplied carrier and set the active span in the given context.
-
#initialize(default_getter: Context::Propagation.text_map_getter) ⇒ TextMapExtractor
constructor
Returns a new TextMapExtractor that extracts OTTrace context using the specified getter.
Constructor Details
#initialize(default_getter: Context::Propagation.text_map_getter) ⇒ TextMapExtractor
Returns a new TextMapExtractor that extracts OTTrace context using the specified getter
31 32 33 |
# File 'lib/opentelemetry/propagator/ottrace/text_map_extractor.rb', line 31 def initialize(default_getter: Context::Propagation.text_map_getter) @default_getter = default_getter end |
Instance Method Details
#extract(carrier, context, getter = nil) ⇒ Context
Extract OTTrace context from the supplied carrier and set the active span in the given context. The original context will be returned if OTTrace cannot be extracted from the carrier.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/opentelemetry/propagator/ottrace/text_map_extractor.rb', line 46 def extract(carrier, context, getter = nil) getter ||= default_getter trace_id = optionally_pad_trace_id(getter.get(carrier, TRACE_ID_HEADER)) span_id = getter.get(carrier, SPAN_ID_HEADER) sampled = getter.get(carrier, SAMPLED_HEADER) return context unless valid?(trace_id: trace_id, span_id: span_id) span_context = Trace::SpanContext.new( trace_id: Array(trace_id).pack('H*'), span_id: Array(span_id).pack('H*'), trace_flags: sampled == 'true' ? Trace::TraceFlags::SAMPLED : Trace::TraceFlags::DEFAULT, remote: true ) span = Trace::Span.new(span_context: span_context) Trace.context_with_span(span, parent_context: set_baggage(carrier: carrier, context: context, getter: getter)) end |