Module: AllStak::Propagation
- Defined in:
- lib/allstak/propagation.rb
Class Method Summary collapse
- .apply_headers(headers, trace_id:, request_id: nil, span_id: nil, sampled: true) ⇒ Object
- .apply_request_headers(req, trace_id:, request_id: nil, span_id: nil, sampled: true) ⇒ Object
- .baggage(trace_id:, request_id: nil, span_id: nil) ⇒ Object
- .merge_baggage(existing, trace_id:, request_id: nil, span_id: nil) ⇒ Object
-
.trace_flags(sampled) ⇒ Object
W3C traceparent trace-flags: “01” = sampled, “00” = not sampled.
Class Method Details
.apply_headers(headers, trace_id:, request_id: nil, span_id: nil, sampled: true) ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/allstak/propagation.rb', line 26 def apply_headers(headers, trace_id:, request_id: nil, span_id: nil, sampled: true) headers["X-AllStak-Trace-Id"] = trace_id headers["X-AllStak-Request-Id"] = request_id if request_id && !request_id.to_s.empty? if span_id && !span_id.to_s.empty? headers["X-AllStak-Span-Id"] = span_id headers["traceparent"] = "00-#{trace_id}-#{span_id[0, 16]}-#{trace_flags(sampled)}" end headers["baggage"] = merge_baggage(headers["baggage"], trace_id: trace_id, request_id: request_id, span_id: span_id) headers["AllStak-Baggage"] = baggage(trace_id: trace_id, request_id: request_id, span_id: span_id) end |
.apply_request_headers(req, trace_id:, request_id: nil, span_id: nil, sampled: true) ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/allstak/propagation.rb', line 37 def apply_request_headers(req, trace_id:, request_id: nil, span_id: nil, sampled: true) req["X-AllStak-Trace-Id"] ||= trace_id req["X-AllStak-Request-Id"] ||= request_id if request_id && !request_id.to_s.empty? if span_id && !span_id.to_s.empty? req["X-AllStak-Span-Id"] ||= span_id req["traceparent"] ||= "00-#{trace_id}-#{span_id[0, 16]}-#{trace_flags(sampled)}" end req["baggage"] = merge_baggage(req["baggage"], trace_id: trace_id, request_id: request_id, span_id: span_id) req["AllStak-Baggage"] = baggage(trace_id: trace_id, request_id: request_id, span_id: span_id) end |
.baggage(trace_id:, request_id: nil, span_id: nil) ⇒ Object
5 6 7 8 9 10 |
# File 'lib/allstak/propagation.rb', line 5 def baggage(trace_id:, request_id: nil, span_id: nil) parts = ["allstak-trace_id=#{trace_id}"] parts << "allstak-request_id=#{request_id}" if request_id && !request_id.to_s.empty? parts << "allstak-span_id=#{span_id}" if span_id && !span_id.to_s.empty? parts.join(",") end |
.merge_baggage(existing, trace_id:, request_id: nil, span_id: nil) ⇒ Object
12 13 14 15 16 17 |
# File 'lib/allstak/propagation.rb', line 12 def merge_baggage(existing, trace_id:, request_id: nil, span_id: nil) preserved = existing.to_s.split(",").map(&:strip).reject do |part| part.empty? || part.downcase.start_with?("allstak-") end (preserved + baggage(trace_id: trace_id, request_id: request_id, span_id: span_id).split(",")).join(",") end |
.trace_flags(sampled) ⇒ Object
W3C traceparent trace-flags: “01” = sampled, “00” = not sampled. ‘sampled` defaults to true to preserve historical behavior for callers that do not pass an explicit sampling decision.
22 23 24 |
# File 'lib/allstak/propagation.rb', line 22 def trace_flags(sampled) sampled == false ? "00" : "01" end |