class Jaeger::Extractors::B3CodecCommon

Public Class Methods

extract(carrier, keys) click to toggle source
# File lib/jaeger/extractors.rb, line 96
def self.extract(carrier, keys)
  return nil if carrier[keys::TRACE_ID].nil? || carrier[keys::SPAN_ID].nil?

  trace_id = if carrier[keys::TRACE_ID].length <= 16
               TraceId.base16_hex_id_to_uint64(carrier[keys::TRACE_ID])
             else
               TraceId.base16_hex_id_to_uint128(carrier[keys::TRACE_ID])
             end

  span_id = TraceId.base16_hex_id_to_uint64(carrier[keys::SPAN_ID])
  parent_id = TraceId.base16_hex_id_to_uint64(carrier[keys::PARENT_SPAN_ID])
  flags = parse_flags(carrier[keys::FLAGS], carrier[keys::SAMPLED])

  return nil if span_id.zero? || trace_id.zero?

  SpanContext.new(
    trace_id: trace_id,
    parent_id: parent_id,
    span_id: span_id,
    flags: flags
  )
end

Private Class Methods

parse_flags(flags_header, sampled_header) click to toggle source

if the flags header is '1' then the sampled header should not be present

# File lib/jaeger/extractors.rb, line 120
def self.parse_flags(flags_header, sampled_header)
  if flags_header == '1'
    Jaeger::SpanContext::Flags::DEBUG
  else
    TraceId.base16_hex_id_to_uint64(sampled_header)
  end
end