class OpenTelemetry::Trace::Propagation::TraceContext::TraceParent

{Trace::SpanContext}
/
A TraceParent is an implementation of the W3C trace context specification

def flag_string

def flag_string
  # the w3c standard only dictates the one flag for this version
  # therefore we can only output the one flag.
  flags.sampled? ? '01' : '00'
end

def from_span_context(ctx)

Returns:
  • (TraceParent) - a trace parent

Parameters:
  • ctx (SpanContext) -- The span context
def from_span_context(ctx)
  new(trace_id: ctx.trace_id, span_id: ctx.span_id, flags: ctx.trace_flags)
end

def from_string(string)

Raises:
  • (InvalidSpanIDError) - on an invalid span_id
  • (InvalidTraceIDError) - on an invalid trace_id
  • (InvalidVerionError) - on an invalid version
  • (InvalidFormatError) - on an invalid format

Returns:
  • (TraceParent) - a trace_parent

Parameters:
  • string (String) -- The serialized trace parent
def from_string(string)
  matches = match_input(string)
  version = parse_version(matches[:version])
  raise InvalidFormatError if version > SUPPORTED_VERSION && string.length < 55
  trace_id = parse_trace_id(matches[:trace_id])
  span_id = parse_span_id(matches[:span_id])
  flags = parse_flags(matches[:flags])
  new(trace_id: trace_id, span_id: span_id, flags: flags)
end

def initialize(trace_id: nil, span_id: nil, version: SUPPORTED_VERSION, flags: Trace::TraceFlags::DEFAULT)

def initialize(trace_id: nil, span_id: nil, version: SUPPORTED_VERSION, flags: Trace::TraceFlags::DEFAULT)
  @trace_id = trace_id
  @span_id = span_id
  @version = version
  @flags = flags
end

def match_input(string)

def match_input(string)
  matches = REGEXP.match(string)
  raise InvalidFormatError, 'regexp match failed' if !matches || matches.length < 6
  matches
end

def parse_flags(string)

def parse_flags(string)
  OpenTelemetry::Trace::TraceFlags.from_byte(string.to_i(16))
end

def parse_span_id(string)

def parse_span_id(string)
  raise InvalidSpanIDError, string if string == INVALID_SPAN_ID
  string.downcase!
  Array(string).pack('H*')
end

def parse_trace_id(string)

def parse_trace_id(string)
  raise InvalidTraceIDError, string if string == INVALID_TRACE_ID
  string.downcase!
  Array(string).pack('H*')
end

def parse_version(string)

def parse_version(string)
  v = string.to_i(16)
  raise InvalidFormatError, string unless v
  raise InvalidVersionError, v if v > MAX_VERSION
  v
end

def sampled?

Returns:
  • (Boolean) - the sampling choice
def sampled?
  flags.sampled?
end

def to_s

Returns:
  • (String) - the serialized trace_parent
def to_s
  "00-#{trace_id.unpack1('H*')}-#{span_id.unpack1('H*')}-#{flag_string}"
end