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
- .format_traceparent(trace_id:, span_id:, sampled: true) ⇒ Object
- .parse_traceparent(header) ⇒ Object
- .valid_id?(value, pattern) ⇒ Boolean
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
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 |