Module: Honeycomb::HoneycombPropagation::UnmarshalTraceContext

Included in:
PropagationParser
Defined in:
lib/honeycomb/propagation/honeycomb.rb

Overview

Parse trace headers

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(serialized_trace) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/honeycomb/propagation/honeycomb.rb', line 17

def parse(serialized_trace)
  unless serialized_trace.nil?
    version, payload = serialized_trace.split(";", 2)

    if version == "1"
      trace_id, parent_span_id, trace_fields, dataset = parse_v1(payload)

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

  [nil, nil, nil, nil]
end

.parse_rack_env(env) ⇒ Object



13
14
15
# File 'lib/honeycomb/propagation/honeycomb.rb', line 13

def parse_rack_env(env)
  parse env["HTTP_X_HONEYCOMB_TRACE"]
end

.parse_v1(payload) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/honeycomb/propagation/honeycomb.rb', line 33

def parse_v1(payload)
  trace_id, parent_span_id, trace_fields, dataset = nil
  payload.split(",").each do |entry|
    key, value = entry.split("=", 2)
    case key.downcase
    when "dataset"
      dataset = URI.decode_www_form_component(value)
    when "trace_id"
      trace_id = value
    when "parent_id"
      parent_span_id = value
    when "context"
      Base64.urlsafe_decode64(value).tap do |json|
        trace_fields = JSON.parse json
      rescue JSON::ParserError
        trace_fields = {}
      end
    end
  end

  [trace_id, parent_span_id, trace_fields, dataset]
end

Instance Method Details

#parse(serialized_trace) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/honeycomb/propagation/honeycomb.rb', line 17

def parse(serialized_trace)
  unless serialized_trace.nil?
    version, payload = serialized_trace.split(";", 2)

    if version == "1"
      trace_id, parent_span_id, trace_fields, dataset = parse_v1(payload)

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

  [nil, nil, nil, nil]
end

#parse_rack_env(env) ⇒ Object



13
14
15
# File 'lib/honeycomb/propagation/honeycomb.rb', line 13

def parse_rack_env(env)
  parse env["HTTP_X_HONEYCOMB_TRACE"]
end