Module: Logtide::Tracing::Propagation

Defined in:
lib/logtide/tracing.rb

Overview

Parsing and building of the ‘traceparent` header (00-trace-span-flags).

Defined Under Namespace

Classes: Parsed

Constant Summary collapse

TRACE_ID =
/\A[a-f0-9]{32}\z/
SPAN_ID =
/\A[a-f0-9]{16}\z/

Class Method Summary collapse

Class Method Details

.format_traceparent(trace_id:, span_id:, sampled: true) ⇒ Object



50
51
52
# File 'lib/logtide/tracing.rb', line 50

def format_traceparent(trace_id:, span_id:, sampled: true)
  "00-#{trace_id}-#{span_id}-#{sampled ? "01" : "00"}"
end

.parse_traceparent(header) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/logtide/tracing.rb', line 34

def parse_traceparent(header)
  return nil unless header

  version, trace_id, parent_span_id, flags = header.split("-")
  return nil unless version == "00"
  return nil unless valid_id?(trace_id, TRACE_ID)
  return nil unless valid_id?(parent_span_id, SPAN_ID)
  return nil unless flags&.match?(/\A[a-f0-9]{2}\z/)

  Parsed.new(
    trace_id: trace_id,
    parent_span_id: parent_span_id,
    sampled: Integer(flags, 16).allbits?(0x01)
  )
end

.valid_id?(value, pattern) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
57
58
# File 'lib/logtide/tracing.rb', line 54

def valid_id?(value, pattern)
  return false unless value&.match?(pattern)

  !value.match?(/\A0+\z/)
end