Class: NewRelic::Agent::OpenTelemetry::Context::Propagation::TracePropagator
- Inherits:
-
Object
- Object
- NewRelic::Agent::OpenTelemetry::Context::Propagation::TracePropagator
- Defined in:
- lib/new_relic/agent/opentelemetry/context/propagation/trace_propagator.rb
Instance Method Summary collapse
-
#extract(carrier, context: ::OpenTelemetry::Context.current, getter: ::OpenTelemetry::Context::Propagation.text_map_getter) ⇒ Object
The return value for this method should be an instance of the OpenTelemetry Context class.
-
#inject(carrier, context: ::OpenTelemetry::Context.current, setter: nil) ⇒ Object
The carrier is the object carrying the headers The context argument is a no-op, as the OpenTelemetry context is not used The setter argument is a no-op, added for consistency with the OpenTelemetry API.
Instance Method Details
#extract(carrier, context: ::OpenTelemetry::Context.current, getter: ::OpenTelemetry::Context::Propagation.text_map_getter) ⇒ Object
The return value for this method should be an instance of the OpenTelemetry Context class. The return value of #accept_distributed_trace_headers is a transaction, so we cannot use it to extract the context.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/new_relic/agent/opentelemetry/context/propagation/trace_propagator.rb', line 23 def extract(carrier, context: ::OpenTelemetry::Context.current, getter: ::OpenTelemetry::Context::Propagation.text_map_getter) carrier_format = determine_format(getter) trace_context = NewRelic::Agent::DistributedTracing::TraceContext.parse( carrier: carrier, format: carrier_format, trace_state_entry_key: Transaction::TraceContext::AccountHelpers.trace_state_entry_key ) return context if trace_context.nil? tp = trace_context.trace_parent span_context = ::OpenTelemetry::Trace::SpanContext.new( trace_id: tp['trace_id'], span_id: tp['parent_id'], trace_flags: tp['trace_flags'], tracestate: trace_context.trace_state_payload, remote: true ) span = ::OpenTelemetry::Trace.non_recording_span(span_context) ::OpenTelemetry::Trace.context_with_span(span, parent_context: context) rescue StandardError => e NewRelic::Agent.logger.error("Unable to extract context: #{e.}") context end |
#inject(carrier, context: ::OpenTelemetry::Context.current, setter: nil) ⇒ Object
The carrier is the object carrying the headers The context argument is a no-op, as the OpenTelemetry context is not used The setter argument is a no-op, added for consistency with the OpenTelemetry API
14 15 16 17 |
# File 'lib/new_relic/agent/opentelemetry/context/propagation/trace_propagator.rb', line 14 def inject(carrier, context: ::OpenTelemetry::Context.current, setter: nil) # TODO: determine if we need to update this method to take Context into account NewRelic::Agent::DistributedTracing.insert_distributed_trace_headers(carrier) end |