Class: Datadog::Tracing::Distributed::Datadog
- Inherits:
-
Object
- Object
- Datadog::Tracing::Distributed::Datadog
- Defined in:
- lib/datadog/tracing/distributed/datadog.rb
Overview
Datadog-style trace propagation.
Constant Summary collapse
- TRACE_ID_KEY =
'x-datadog-trace-id'- PARENT_ID_KEY =
'x-datadog-parent-id'- SAMPLING_PRIORITY_KEY =
'x-datadog-sampling-priority'- ORIGIN_KEY =
'x-datadog-origin'- TAGS_KEY =
Distributed trace-level tags
'x-datadog-tags'- TAGS_PREFIX =
Prefix used by all Datadog-specific distributed tags
'x-datadog-'
Instance Method Summary collapse
- #extract(data) ⇒ Object
-
#initialize(fetcher:, trace_id_key: TRACE_ID_KEY, parent_id_key: PARENT_ID_KEY, sampling_priority_key: SAMPLING_PRIORITY_KEY, origin_key: ORIGIN_KEY, tags_key: TAGS_KEY) ⇒ Datadog
constructor
A new instance of Datadog.
- #inject!(digest, data) ⇒ Object
Constructor Details
#initialize(fetcher:, trace_id_key: TRACE_ID_KEY, parent_id_key: PARENT_ID_KEY, sampling_priority_key: SAMPLING_PRIORITY_KEY, origin_key: ORIGIN_KEY, tags_key: TAGS_KEY) ⇒ Datadog
Returns a new instance of Datadog.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/datadog/tracing/distributed/datadog.rb', line 24 def initialize( fetcher:, trace_id_key: TRACE_ID_KEY, parent_id_key: PARENT_ID_KEY, sampling_priority_key: SAMPLING_PRIORITY_KEY, origin_key: ORIGIN_KEY, tags_key: TAGS_KEY ) @trace_id_key = trace_id_key @parent_id_key = parent_id_key @sampling_priority_key = sampling_priority_key @origin_key = origin_key @tags_key = @fetcher = fetcher end |
Instance Method Details
#extract(data) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/datadog/tracing/distributed/datadog.rb', line 56 def extract(data) fetcher = @fetcher.new(data) trace_id = parse_trace_id(fetcher) parent_id = parse_parent_id(fetcher) sampling_priority = Helpers.parse_decimal_id(fetcher[@sampling_priority_key]) origin = fetcher[@origin_key] # Return early if this propagation is not valid # DEV: To be valid we need to have a trace id and a parent id # or when it is a synthetics trace, just the trace id. # DEV: `Fetcher#id` will not return 0 return unless (trace_id && parent_id) || (origin && trace_id) = (fetcher) # If trace id is 128 bits long, # Concatentated high order 64 bit hex-encoded `tid` tag trace_id = extract_trace_id!(trace_id, ) TraceDigest.new( span_id: parent_id, trace_id: trace_id, trace_origin: origin, trace_sampling_priority: sampling_priority, trace_distributed_tags: , ) end |
#inject!(digest, data) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/datadog/tracing/distributed/datadog.rb', line 40 def inject!(digest, data) return if digest.nil? data[@trace_id_key] = Tracing::Utils::TraceId.to_low_order(digest.trace_id).to_s data[@parent_id_key] = digest.span_id.to_s data[@sampling_priority_key] = digest.trace_sampling_priority.to_s if digest.trace_sampling_priority data[@origin_key] = digest.trace_origin.to_s if digest.trace_origin (digest).tap do || (, data) unless .empty? end data end |