datadog 2.35.0 → 2.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +40 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +68 -31
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +37 -18
- data/ext/datadog_profiling_native_extension/collectors_stack.h +8 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +434 -300
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +9 -7
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +7 -8
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +0 -12
- data/ext/datadog_profiling_native_extension/extconf.rb +2 -2
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +4 -43
- data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +15 -47
- data/ext/datadog_profiling_native_extension/heap_recorder.c +44 -26
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +14 -35
- data/ext/datadog_profiling_native_extension/profiling.c +41 -4
- data/ext/datadog_profiling_native_extension/ruby_helpers.c +33 -34
- data/ext/datadog_profiling_native_extension/stack_recorder.c +24 -3
- data/ext/datadog_profiling_native_extension/stack_recorder.h +1 -0
- data/ext/datadog_profiling_native_extension/unsafe_api_calls_check.h +4 -2
- data/ext/libdatadog_api/datadog_ruby_common.c +7 -8
- data/ext/libdatadog_api/datadog_ruby_common.h +0 -12
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/api_security/route_extractor.rb +6 -0
- data/lib/datadog/appsec/component.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +7 -0
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +37 -4
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +64 -19
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -0
- data/lib/datadog/appsec/contrib/rack/buffered_input.rb +83 -0
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +41 -3
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +20 -7
- data/lib/datadog/appsec/contrib/rack/input_peeker.rb +92 -0
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +33 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +17 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +20 -3
- data/lib/datadog/appsec/default_header_tags.rb +10 -6
- data/lib/datadog/core/configuration/components.rb +1 -0
- data/lib/datadog/core/configuration/settings.rb +1 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +2 -0
- data/lib/datadog/core/remote/component.rb +1 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +0 -21
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +1 -1
- data/lib/datadog/core/utils/forking.rb +3 -1
- data/lib/datadog/core/utils/spawn_monkey_patch.rb +3 -1
- data/lib/datadog/core.rb +3 -0
- data/lib/datadog/di/base.rb +4 -1
- data/lib/datadog/di/component.rb +1 -1
- data/lib/datadog/error_tracking/collector.rb +2 -1
- data/lib/datadog/error_tracking/component.rb +2 -2
- data/lib/datadog/kit/tracing/method_tracer.rb +4 -1
- data/lib/datadog/opentelemetry/sdk/propagator.rb +9 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +4 -1
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -0
- data/lib/datadog/profiling/component.rb +13 -15
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +3 -3
- data/lib/datadog/ruby_version.rb +25 -0
- data/lib/datadog/symbol_database/component.rb +306 -98
- data/lib/datadog/symbol_database/extractor.rb +223 -84
- data/lib/datadog/tracing/configuration/ext.rb +13 -0
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +7 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/grpc.rb +1 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/http.rb +1 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/karafka.rb +1 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +3 -1
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +3 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/sidekiq.rb +1 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +2 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +1 -0
- data/lib/datadog/tracing/distributed/propagation.rb +33 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +11 -2
- data/lib/datadog/tracing/trace_digest.rb +7 -0
- data/lib/datadog/tracing/trace_operation.rb +4 -1
- data/lib/datadog/tracing/tracer.rb +1 -0
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +4 -1
- metadata +8 -5
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
require_relative '../configuration/ext'
|
|
4
4
|
require_relative '../trace_digest'
|
|
5
5
|
require_relative '../trace_operation'
|
|
6
|
+
require_relative '../span_link'
|
|
6
7
|
require_relative '../../core/telemetry/logger'
|
|
7
8
|
require_relative 'baggage'
|
|
8
9
|
|
|
@@ -13,6 +14,8 @@ module Datadog
|
|
|
13
14
|
class Propagation
|
|
14
15
|
# @param propagation_styles [Hash<String,Object>]
|
|
15
16
|
# a map of propagation styles to their corresponding implementations
|
|
17
|
+
# @param propagation_behavior_extract [String]
|
|
18
|
+
# the behavior to apply when extracting distributed trace data
|
|
16
19
|
# @param propagation_style_inject [Array<String>]
|
|
17
20
|
# a list of styles to use when injecting distributed trace data
|
|
18
21
|
# @param propagation_style_extract [Array<String>]
|
|
@@ -23,9 +26,11 @@ module Datadog
|
|
|
23
26
|
propagation_styles:,
|
|
24
27
|
propagation_style_inject:,
|
|
25
28
|
propagation_style_extract:,
|
|
29
|
+
propagation_behavior_extract:,
|
|
26
30
|
propagation_extract_first:
|
|
27
31
|
)
|
|
28
32
|
@propagation_styles = propagation_styles
|
|
33
|
+
@propagation_behavior_extract = propagation_behavior_extract
|
|
29
34
|
@propagation_extract_first = propagation_extract_first
|
|
30
35
|
@propagation_style_inject = propagation_style_inject.map { |style| propagation_styles[style] }
|
|
31
36
|
@propagation_style_extract = propagation_style_extract.map { |style| propagation_styles[style] }
|
|
@@ -97,12 +102,20 @@ module Datadog
|
|
|
97
102
|
return unless data
|
|
98
103
|
return if data.empty?
|
|
99
104
|
|
|
105
|
+
if @propagation_behavior_extract == Tracing::Configuration::Ext::Distributed::PROPAGATION_BEHAVIOR_EXTRACT_IGNORE
|
|
106
|
+
return nil
|
|
107
|
+
end
|
|
108
|
+
|
|
100
109
|
extracted_trace_digest = nil
|
|
110
|
+
# Name of the propagation style that first produced a trace context.
|
|
111
|
+
# Used as the `context_headers` span-link attribute when restarting a trace.
|
|
112
|
+
extracted_style_name = nil
|
|
101
113
|
|
|
102
114
|
@propagation_style_extract.each do |propagator|
|
|
103
115
|
# First extraction?
|
|
104
116
|
unless extracted_trace_digest
|
|
105
117
|
extracted_trace_digest = propagator.extract(data)
|
|
118
|
+
extracted_style_name = @propagation_styles.key(propagator) if extracted_trace_digest
|
|
106
119
|
next
|
|
107
120
|
end
|
|
108
121
|
|
|
@@ -145,7 +158,26 @@ module Datadog
|
|
|
145
158
|
# Handle baggage after all other styles if present
|
|
146
159
|
extracted_trace_digest = propagate_baggage(data, extracted_trace_digest) if @baggage_propagator
|
|
147
160
|
|
|
148
|
-
|
|
161
|
+
# Default mode: Current digest continues the upstream trace.
|
|
162
|
+
return extracted_trace_digest if @propagation_behavior_extract != Tracing::Configuration::Ext::Distributed::PROPAGATION_BEHAVIOR_EXTRACT_RESTART || extracted_trace_digest&.trace_id.nil?
|
|
163
|
+
|
|
164
|
+
# Restart mode: start a new local digest and create a Span Link on
|
|
165
|
+
# the service-entry span with the original propagation data.
|
|
166
|
+
link = SpanLink.new(
|
|
167
|
+
extracted_trace_digest,
|
|
168
|
+
attributes: {
|
|
169
|
+
'reason' => 'propagation_behavior_extract',
|
|
170
|
+
'context_headers' => extracted_style_name,
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
baggage_tags = extracted_trace_digest.trace_distributed_tags&.select { |k, _| k.start_with?('baggage.') }
|
|
174
|
+
baggage_tags = nil if baggage_tags&.empty?
|
|
175
|
+
TraceDigest.new(
|
|
176
|
+
span_links: [link],
|
|
177
|
+
baggage: extracted_trace_digest.baggage,
|
|
178
|
+
trace_distributed_tags: baggage_tags,
|
|
179
|
+
span_remote: false,
|
|
180
|
+
)
|
|
149
181
|
end
|
|
150
182
|
|
|
151
183
|
private
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../core/utils'
|
|
4
|
+
require_relative 'helpers'
|
|
5
|
+
|
|
3
6
|
module Datadog
|
|
4
7
|
module Tracing
|
|
5
8
|
module Distributed
|
|
@@ -282,8 +285,11 @@ module Datadog
|
|
|
282
285
|
trace_flags & TRACE_FLAGS_SAMPLED
|
|
283
286
|
end
|
|
284
287
|
|
|
285
|
-
# @return [
|
|
286
|
-
#
|
|
288
|
+
# @return [nil] when the tracestate is absent or has no vendor entries.
|
|
289
|
+
# @return [String] when no `dd=` entry is present, the joined vendor list.
|
|
290
|
+
# @return [Array(String, Integer, String, String, Hash, String)] when a `dd=`
|
|
291
|
+
# entry is present: [tracestate without `dd=`, sampling_priority, origin,
|
|
292
|
+
# ts_parent_id, tags, unknown_fields]. All elements past the first may be nil.
|
|
287
293
|
def extract_tracestate(tracestate)
|
|
288
294
|
vendors = split_tracestate(tracestate)
|
|
289
295
|
return unless vendors && !vendors.empty?
|
|
@@ -395,6 +401,9 @@ module Datadog
|
|
|
395
401
|
tracestate = tracestate.chop
|
|
396
402
|
end
|
|
397
403
|
|
|
404
|
+
tracestate = ::Datadog::Core::Utils.utf8_encode(tracestate, placeholder: nil)
|
|
405
|
+
return unless tracestate
|
|
406
|
+
|
|
398
407
|
vendors = tracestate.split(',', TRACESTATE_MAX_LIST_MEMBERS + 1)
|
|
399
408
|
if vendors.length > TRACESTATE_MAX_LIST_MEMBERS || remove_last_member
|
|
400
409
|
vendors.pop
|
|
@@ -22,6 +22,9 @@ module Datadog
|
|
|
22
22
|
# @!attribute [r] span_type
|
|
23
23
|
# The type of the currently active span.
|
|
24
24
|
# @return [String]
|
|
25
|
+
# @!attribute [r] span_links
|
|
26
|
+
# Span links associated with this trace context.
|
|
27
|
+
# @return [Array<Datadog::Tracing::SpanLink>, nil]
|
|
25
28
|
# @!attribute [r] trace_distributed_tags
|
|
26
29
|
# Datadog-specific tags that support richer distributed tracing association.
|
|
27
30
|
# @return [Hash<String,String>]
|
|
@@ -91,6 +94,7 @@ module Datadog
|
|
|
91
94
|
:span_resource,
|
|
92
95
|
:span_service,
|
|
93
96
|
:span_type,
|
|
97
|
+
:span_links,
|
|
94
98
|
:trace_distributed_tags,
|
|
95
99
|
:trace_hostname,
|
|
96
100
|
:trace_id,
|
|
@@ -114,6 +118,7 @@ module Datadog
|
|
|
114
118
|
span_resource: nil,
|
|
115
119
|
span_service: nil,
|
|
116
120
|
span_type: nil,
|
|
121
|
+
span_links: nil,
|
|
117
122
|
trace_distributed_tags: nil,
|
|
118
123
|
trace_hostname: nil,
|
|
119
124
|
trace_id: nil,
|
|
@@ -136,6 +141,7 @@ module Datadog
|
|
|
136
141
|
@span_resource = span_resource && span_resource.dup.freeze
|
|
137
142
|
@span_service = span_service && span_service.dup.freeze
|
|
138
143
|
@span_type = span_type && span_type.dup.freeze
|
|
144
|
+
@span_links = span_links && span_links.dup.freeze
|
|
139
145
|
@trace_distributed_tags = trace_distributed_tags && trace_distributed_tags.dup.freeze
|
|
140
146
|
@trace_hostname = trace_hostname && trace_hostname.dup.freeze
|
|
141
147
|
@trace_id = trace_id
|
|
@@ -167,6 +173,7 @@ module Datadog
|
|
|
167
173
|
span_resource: span_resource,
|
|
168
174
|
span_service: span_service,
|
|
169
175
|
span_type: span_type,
|
|
176
|
+
span_links: span_links,
|
|
170
177
|
trace_distributed_tags: trace_distributed_tags,
|
|
171
178
|
trace_hostname: trace_hostname,
|
|
172
179
|
trace_id: trace_id,
|
|
@@ -58,6 +58,7 @@ module Datadog
|
|
|
58
58
|
|
|
59
59
|
# Creates a new TraceOperation.
|
|
60
60
|
#
|
|
61
|
+
# @param span_links [Array<Datadog::Tracing::SpanLink>, nil] links to attach to the local root span.
|
|
61
62
|
# @param auto_finish [Boolean] when true, automatically finishes the trace when the local root span finishes.
|
|
62
63
|
# When false, the trace remains unfinished until {#finish!} is called.
|
|
63
64
|
# This is useful when this {TraceOperation} represents the continuation of a remote {TraceDigest},
|
|
@@ -72,6 +73,7 @@ module Datadog
|
|
|
72
73
|
name: nil,
|
|
73
74
|
origin: nil,
|
|
74
75
|
parent_span_id: nil,
|
|
76
|
+
span_links: nil,
|
|
75
77
|
rate_limiter_rate: nil,
|
|
76
78
|
resource: nil,
|
|
77
79
|
rule_sample_rate: nil,
|
|
@@ -98,7 +100,7 @@ module Datadog
|
|
|
98
100
|
@parent_span_id = parent_span_id
|
|
99
101
|
@sampled = sampled.nil? || sampled
|
|
100
102
|
@remote_parent = remote_parent
|
|
101
|
-
|
|
103
|
+
@span_links = span_links
|
|
102
104
|
# Tags
|
|
103
105
|
@agent_sample_rate = agent_sample_rate
|
|
104
106
|
@hostname = hostname
|
|
@@ -318,6 +320,7 @@ module Datadog
|
|
|
318
320
|
events: span_events,
|
|
319
321
|
on_error: on_error,
|
|
320
322
|
parent_id: parent_id,
|
|
323
|
+
links: (@root_span.nil? ? @span_links : nil),
|
|
321
324
|
resource: resource || op_name,
|
|
322
325
|
service: service,
|
|
323
326
|
start_time: start_time,
|
|
@@ -387,6 +387,7 @@ module Datadog
|
|
|
387
387
|
origin: digest.trace_origin,
|
|
388
388
|
parent_span_id: digest.span_id,
|
|
389
389
|
sampling_priority: sampling_priority,
|
|
390
|
+
span_links: digest.span_links,
|
|
390
391
|
# Distributed tags are just regular trace tags with special meaning to Datadog
|
|
391
392
|
tags: digest.trace_distributed_tags,
|
|
392
393
|
trace_state: digest.trace_state,
|
data/lib/datadog/version.rb
CHANGED
data/lib/datadog.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
# Load core first so shared helpers (e.g. Datadog::RubyVersion) are available at require-time
|
|
4
|
+
require_relative 'datadog/core'
|
|
5
|
+
|
|
3
6
|
# Load tracing
|
|
4
7
|
require_relative 'datadog/tracing'
|
|
5
8
|
require_relative 'datadog/tracing/contrib'
|
|
@@ -16,7 +19,7 @@ require_relative 'datadog/open_feature'
|
|
|
16
19
|
# trace point. Activate DI automatically on supported Ruby versions but
|
|
17
20
|
# always load its settings so that, for example, turning DI off when
|
|
18
21
|
# we are on Ruby 2.5 does not produce exceptions.
|
|
19
|
-
require_relative 'datadog/di/boot' if
|
|
22
|
+
require_relative 'datadog/di/boot' if Datadog::RubyVersion.is?('>= 2.6') && RUBY_ENGINE != 'jruby'
|
|
20
23
|
|
|
21
24
|
require_relative 'datadog/error_tracking'
|
|
22
25
|
require_relative 'datadog/kit'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: datadog
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.36.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Datadog, Inc.
|
|
@@ -63,14 +63,14 @@ dependencies:
|
|
|
63
63
|
requirements:
|
|
64
64
|
- - "~>"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version:
|
|
66
|
+
version: 35.0.0.1.0
|
|
67
67
|
type: :runtime
|
|
68
68
|
prerelease: false
|
|
69
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
70
70
|
requirements:
|
|
71
71
|
- - "~>"
|
|
72
72
|
- !ruby/object:Gem::Version
|
|
73
|
-
version:
|
|
73
|
+
version: 35.0.0.1.0
|
|
74
74
|
- !ruby/object:Gem::Dependency
|
|
75
75
|
name: logger
|
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -265,10 +265,12 @@ files:
|
|
|
265
265
|
- lib/datadog/appsec/contrib/graphql/integration.rb
|
|
266
266
|
- lib/datadog/appsec/contrib/graphql/patcher.rb
|
|
267
267
|
- lib/datadog/appsec/contrib/integration.rb
|
|
268
|
+
- lib/datadog/appsec/contrib/rack/buffered_input.rb
|
|
268
269
|
- lib/datadog/appsec/contrib/rack/ext.rb
|
|
269
270
|
- lib/datadog/appsec/contrib/rack/gateway/request.rb
|
|
270
271
|
- lib/datadog/appsec/contrib/rack/gateway/response.rb
|
|
271
272
|
- lib/datadog/appsec/contrib/rack/gateway/watcher.rb
|
|
273
|
+
- lib/datadog/appsec/contrib/rack/input_peeker.rb
|
|
272
274
|
- lib/datadog/appsec/contrib/rack/integration.rb
|
|
273
275
|
- lib/datadog/appsec/contrib/rack/patcher.rb
|
|
274
276
|
- lib/datadog/appsec/contrib/rack/request_body_middleware.rb
|
|
@@ -622,6 +624,7 @@ files:
|
|
|
622
624
|
- lib/datadog/profiling/tasks/exec.rb
|
|
623
625
|
- lib/datadog/profiling/tasks/help.rb
|
|
624
626
|
- lib/datadog/profiling/tasks/setup.rb
|
|
627
|
+
- lib/datadog/ruby_version.rb
|
|
625
628
|
- lib/datadog/single_step_instrument.rb
|
|
626
629
|
- lib/datadog/symbol_database.rb
|
|
627
630
|
- lib/datadog/symbol_database/component.rb
|
|
@@ -1137,8 +1140,8 @@ licenses:
|
|
|
1137
1140
|
- Apache-2.0
|
|
1138
1141
|
metadata:
|
|
1139
1142
|
allowed_push_host: https://rubygems.org
|
|
1140
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
|
1141
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
|
1143
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.36.0/CHANGELOG.md
|
|
1144
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.36.0
|
|
1142
1145
|
post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
|
|
1143
1146
|
rdoc_options: []
|
|
1144
1147
|
require_paths:
|