module Honeycomb::W3CPropagation::UnmarshalTraceContext

Parse trace headers

Constants

INVALID_SPAN_ID
INVALID_TRACE_ID

Public Class Methods

parse(serialized_trace) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 15
def parse(serialized_trace)
  unless serialized_trace.nil?
    version, payload = serialized_trace.split("-", 2)
    # version should be 2 hex characters
    if version =~ /^[A-Fa-f0-9]{2}$/
      trace_id, parent_span_id = parse_v1(payload)

      if !trace_id.nil? && !parent_span_id.nil?
        # return nil for dataset
        return [trace_id, parent_span_id, nil, nil]
      end
    end
  end
  [nil, nil, nil, nil]
end
parse_rack_env(env) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 11
def parse_rack_env(env)
  parse env["HTTP_TRACEPARENT"]
end
parse_v1(payload) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 31
def parse_v1(payload)
  trace_id, parent_span_id, trace_flags = payload.split("-", 3)

  if trace_flags.nil?
    # if trace_flags is nil, it means a field is missing
    return [nil, nil]
  end

  if trace_id == INVALID_TRACE_ID || parent_span_id == INVALID_SPAN_ID
    return [nil, nil]
  end

  [trace_id, parent_span_id]
end

Public Instance Methods

parse(serialized_trace) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 15
def parse(serialized_trace)
  unless serialized_trace.nil?
    version, payload = serialized_trace.split("-", 2)
    # version should be 2 hex characters
    if version =~ /^[A-Fa-f0-9]{2}$/
      trace_id, parent_span_id = parse_v1(payload)

      if !trace_id.nil? && !parent_span_id.nil?
        # return nil for dataset
        return [trace_id, parent_span_id, nil, nil]
      end
    end
  end
  [nil, nil, nil, nil]
end

Private Instance Methods

parse_rack_env(env) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 11
def parse_rack_env(env)
  parse env["HTTP_TRACEPARENT"]
end
parse_v1(payload) click to toggle source
# File lib/honeycomb/propagation/w3c.rb, line 31
def parse_v1(payload)
  trace_id, parent_span_id, trace_flags = payload.split("-", 3)

  if trace_flags.nil?
    # if trace_flags is nil, it means a field is missing
    return [nil, nil]
  end

  if trace_id == INVALID_TRACE_ID || parent_span_id == INVALID_SPAN_ID
    return [nil, nil]
  end

  [trace_id, parent_span_id]
end