class OpenTelemetry::Context::Propagation::CompositeTextMapPropagator

A composite text map propagator either composes a list of injectors and a list of extractors, or wraps a list of propagators, into a single interface exposing inject and extract methods. Injection and extraction will preserve the order of the injectors and extractors (or propagators) passed in during initialization.

Public Class Methods

compose(injectors:, extractors:) click to toggle source

Returns a Propagator that extracts using the provided extractors and injectors.

@param [Array<#inject, fields>] injectors An array of text map injectors @param [Array<#extract>] extractors An array of text map extractors

# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 24
def compose(injectors:, extractors:)
  raise ArgumentError, 'injectors and extractors must both be non-nil arrays' unless injectors.is_a?(Array) && extractors.is_a?(Array)

  new(injectors: injectors, extractors: extractors)
end
compose_propagators(propagators) click to toggle source

Returns a Propagator that extracts using the provided propagators.

@param [Array<#inject, extract, fields>] propagators An array of

text map propagators
# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 34
def compose_propagators(propagators)
  raise ArgumentError, 'propagators must be a non-nil array' unless propagators.is_a?(Array)
  return NoopTextMapPropagator.new if propagators.empty?
  return propagators.first if propagators.size == 1

  new(propagators: propagators)
end
new(injectors: nil, extractors: nil, propagators: nil) click to toggle source

@api private

# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 44
def initialize(injectors: nil, extractors: nil, propagators: nil)
  @injectors = injectors
  @extractors = extractors
  @propagators = propagators
end

Public Instance Methods

extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter) click to toggle source

Runs extractors or propagators in order and returns a Context updated with the results of each extraction. If an extraction fails, a warning will be logged and remaining extractors will continue to be executed. Always returns a valid context.

@param [Object] carrier The carrier to extract context from. @param [optional Context] context Context to be updated with the state

extracted from the carrier. Defaults to +Context.current+.

@param [optional Getter] getter If the optional getter is provided, it

will be used to read the header from the carrier, otherwise the default
getter will be used.

@return [Context] a new context updated with state extracted from the

carrier
# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 83
def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
  extractors = @extractors || @propagators
  extractors.inject(context) do |ctx, extractor|
    extractor.extract(carrier, context: ctx, getter: getter)
  rescue StandardError => e
    OpenTelemetry.logger.warn "Error in CompositePropagator#extract #{e.message}"
    ctx
  end
end
fields() click to toggle source

Returns the union of the propagation fields returned by the composed injectors or propagators. If your carrier is reused, you should delete the fields returned by this method before calling inject.

@return [Array<String>] a list of fields that will be used by this propagator.

# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 98
def fields
  injectors = @injectors || @propagators
  injectors.flat_map(&fields).uniq
end
inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter) click to toggle source

Runs injectors or propagators in order. If an injection fails a warning will be logged and remaining injectors will be executed.

@param [Object] carrier A mutable carrier to inject context into. @param [optional Context] context Context to be injected into carrier. Defaults

to +Context.current+.

@param [optional Setter] setter If the optional setter is provided, it

will be used to write context into the carrier, otherwise the default
setter will be used.
# File lib/opentelemetry/context/propagation/composite_text_map_propagator.rb, line 59
def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter)
  injectors = @injectors || @propagators
  injectors.each do |injector|
    injector.inject(carrier, context: context, setter: setter)
  rescue StandardError => e
    OpenTelemetry.logger.warn "Error in CompositePropagator#inject #{e.message}"
  end
  nil
end