class Datadog::OpenTelemetry::SDK::Propagator
OpenTelemetry propagator API.
Compatibility wrapper to allow Datadog propagators to fulfill the
def extract(
def extract( carrier, context: ::OpenTelemetry::Context.current, getter: ::OpenTelemetry::Context::Propagation.text_map_getter ) unless getter == ::OpenTelemetry::Context::Propagation.text_map_getter Datadog.logger.error( 'Custom getter is not supported. Please inform the `ddtrace` team at ' \ ' https://github.com/DataDog/dd-trace-rb of your use case so we can best support you. Using the default ' \ 'OpenTelemetry::Context::Propagation.text_map_getter as a fallback getter.' ) end digest = @datadog_propagator.extract(carrier) return context unless digest trace_id = to_otel_id(digest.trace_id) span_id = to_otel_id(digest.span_id) if digest.trace_state || digest.trace_flags trace_flags = ::OpenTelemetry::Trace::TraceFlags.from_byte(digest.trace_flags) tracestate = Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_tracestate, digest) else trace_flags = if Tracing::Sampling::PrioritySampler.sampled?(digest.trace_sampling_priority) ::OpenTelemetry::Trace::TraceFlags::SAMPLED else ::OpenTelemetry::Trace::TraceFlags::DEFAULT end tracestate = ::OpenTelemetry::Trace::Tracestate::DEFAULT end span_context = ::OpenTelemetry::Trace::SpanContext.new( trace_id: trace_id, span_id: span_id, trace_flags: trace_flags, tracestate: tracestate, remote: true ) span = ::OpenTelemetry::Trace.non_recording_span(span_context) trace = Tracing.continue_trace!(digest) span.datadog_trace = trace ::OpenTelemetry::Trace.context_with_span(span, parent_context: context) end
def fields
Returns fields set by this propagator.
def fields [] end
def initialize(datadog_propagator)
def initialize(datadog_propagator) @datadog_propagator = datadog_propagator end
def inject(
def inject( carrier, context: ::OpenTelemetry::Context.current, setter: ::OpenTelemetry::Context::Propagation.text_map_setter ) unless setter == ::OpenTelemetry::Context::Propagation.text_map_setter Datadog.logger.error( 'Custom setter is not supported. Please inform the `ddtrace` team at ' \ ' https://github.com/DataDog/dd-trace-rb of your use case so we can best support you. Using the default ' \ 'OpenTelemetry::Context::Propagation.text_map_setter as a fallback setter.' ) end @datadog_propagator.inject!(context.trace.to_digest, carrier) end
def to_otel_id(dd_id)
Converts the {Numeric} Datadog id object to OpenTelemetry's byte array format.
def to_otel_id(dd_id) Array(dd_id).pack('Q') end