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
41 42 43 44 45 46 47 |
# File 'lib/julewire/gcp/trace_context.rb', line 41 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
49 50 51 |
# File 'lib/julewire/gcp/trace_context.rb', line 49 def parse_traceparent(value) Traceparent.call(value) end |
.parse_x_cloud_trace_context(value) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/julewire/gcp/trace_context.rb', line 53 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 |