class Jaeger::Extractors::TraceContextRackCodec

Constants

HEADER_V0_PATTERN

Internal regex used to parse fields in version 0

VERSION_PATTERN

Internal regex used to identify the TraceContext version

Public Class Methods

extract(carrier) click to toggle source
# File lib/jaeger/extractors.rb, line 137
def self.extract(carrier)
  header_value = carrier['HTTP_TRACEPARENT']

  version_match = VERSION_PATTERN.match(header_value)
  return nil unless version_match

  # We currently only support version 0
  return nil if version_match[1].to_i(16) != 0

  match = HEADER_V0_PATTERN.match(version_match[2])
  return nil unless match

  trace_id = TraceId.base16_hex_id_to_uint128(match[1])
  span_id = TraceId.base16_hex_id_to_uint64(match[2])
  flags = TraceId.base16_hex_id_to_uint64(match[4])
  return nil if trace_id.zero? || span_id.zero?

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