Module: Julewire::GCP::TraceContext
- Defined in:
- lib/julewire/gcp/trace_context.rb,
lib/julewire/gcp/trace_context/traceparent.rb
Defined Under Namespace
Modules: Traceparent
Constant Summary collapse
- X_CLOUD_TRACE_PATTERN =
%r{\A([[:xdigit:]]{32})(?:/(\d+))?(?:;o=(\d+))?\z}- TRACEPARENT_HEADER =
"traceparent"- X_CLOUD_TRACE_CONTEXT_HEADER =
"x-cloud-trace-context"- X_CLOUD_TRACE_CONTEXT_UNDERSCORE_HEADER =
"x_cloud_trace_context"- MAX_SPAN_ID =
(2**64) - 1
Class Method Summary collapse
- .extract(headers) ⇒ Object
- .parse_traceparent(value) ⇒ Object
- .parse_x_cloud_trace_context(value) ⇒ Object
Class Method Details
.extract(headers) ⇒ Object
35 36 37 38 39 40 41 |
# File 'lib/julewire/gcp/trace_context.rb', line 35 def extract(headers) return {} unless headers.respond_to?(:[]) parse_traceparent(fetch_header(headers, :traceparent)) || parse_x_cloud_trace_context(fetch_header(headers, :x_cloud_trace_context)) || {} end |
.parse_traceparent(value) ⇒ Object
43 44 45 |
# File 'lib/julewire/gcp/trace_context.rb', line 43 def parse_traceparent(value) Traceparent.call(value) end |
.parse_x_cloud_trace_context(value) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/julewire/gcp/trace_context.rb', line 47 def parse_x_cloud_trace_context(value) match = X_CLOUD_TRACE_PATTERN.match(value.to_s.scrub.strip) return unless match trace_id = match[1].downcase return if Hex.zero?(trace_id) context = { trace_id: trace_id } if match[2] span_id = decimal_span_to_hex(match[2]) context[:span_id] = span_id if span_id end context[:trace_sampled] = Integer(match[3], 10).allbits?(1) if match[3] context end |