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)
-
(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)
-
(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?
-
(Boolean)
- the sampling choice
def sampled? flags.sampled? end
def to_s
-
(String)
- the serialized trace_parent
def to_s "00-#{trace_id.unpack1('H*')}-#{span_id.unpack1('H*')}-#{flag_string}" end