ddtrace 1.16.0 → 1.18.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 +86 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +8 -1
- data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -10
- data/ext/ddtrace_profiling_native_extension/http_transport.c +5 -2
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +78 -18
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +6 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +1 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +1 -3
- data/lib/datadog/appsec/component.rb +4 -1
- data/lib/datadog/appsec/configuration/settings.rb +4 -6
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +2 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +0 -46
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -5
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +0 -10
- data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
- data/lib/datadog/appsec/remote.rb +12 -9
- data/lib/datadog/core/configuration/settings.rb +1 -1
- data/lib/datadog/core/configuration.rb +4 -0
- data/lib/datadog/core/remote/worker.rb +1 -0
- data/lib/datadog/core/workers/async.rb +1 -0
- data/lib/datadog/kit/enable_core_dumps.rb +5 -6
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +39 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +102 -3
- data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +1 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
- data/lib/datadog/profiling/component.rb +13 -5
- data/lib/datadog/tracing/configuration/ext.rb +3 -0
- data/lib/datadog/tracing/configuration/settings.rb +18 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +5 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +24 -0
- data/lib/datadog/tracing/distributed/datadog.rb +0 -1
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/trace_digest.rb +31 -0
- data/lib/datadog/tracing/workers.rb +1 -0
- data/lib/ddtrace/version.rb +1 -1
- metadata +7 -7
@@ -83,19 +83,40 @@ module Datadog
|
|
83
83
|
|
84
84
|
extracted_trace_digest = nil
|
85
85
|
|
86
|
-
::Datadog.configuration.tracing.distributed_tracing
|
86
|
+
config = ::Datadog.configuration.tracing.distributed_tracing
|
87
|
+
|
88
|
+
config.propagation_extract_style.each do |style|
|
87
89
|
propagator = @propagation_styles[style]
|
88
90
|
next if propagator.nil?
|
89
91
|
|
90
92
|
begin
|
91
|
-
extracted_trace_digest
|
93
|
+
if extracted_trace_digest
|
94
|
+
# Return if we are only inspecting the first valid style.
|
95
|
+
next if config.propagation_extract_first
|
96
|
+
|
97
|
+
# Continue parsing styles to find the W3C `tracestate` header, if present.
|
98
|
+
# `tracestate` must always be propagated, as it might contain pass-through data that we don't control.
|
99
|
+
# @see https://www.w3.org/TR/2021/REC-trace-context-1-20211123/#mutating-the-tracestate-field
|
100
|
+
next if style != Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT
|
101
|
+
|
102
|
+
if (tracecontext_digest = propagator.extract(data))
|
103
|
+
# Only parse if it represent the same trace as the successfully extracted one
|
104
|
+
next unless tracecontext_digest.trace_id == extracted_trace_digest.trace_id
|
105
|
+
|
106
|
+
# Preserve the `tracestate`
|
107
|
+
extracted_trace_digest = extracted_trace_digest.merge(
|
108
|
+
trace_state: tracecontext_digest.trace_state,
|
109
|
+
trace_state_unknown_fields: tracecontext_digest.trace_state_unknown_fields
|
110
|
+
)
|
111
|
+
end
|
112
|
+
else
|
113
|
+
extracted_trace_digest = propagator.extract(data)
|
114
|
+
end
|
92
115
|
rescue => e
|
93
116
|
::Datadog.logger.error(
|
94
117
|
"Error extracting distributed trace data. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
95
118
|
)
|
96
119
|
end
|
97
|
-
|
98
|
-
break if extracted_trace_digest
|
99
120
|
end
|
100
121
|
|
101
122
|
extracted_trace_digest
|
@@ -141,6 +141,37 @@ module Datadog
|
|
141
141
|
|
142
142
|
freeze
|
143
143
|
end
|
144
|
+
|
145
|
+
# Creates a copy of this object, modifying the provided fields.
|
146
|
+
# @param field_value_pairs [Hash<String>] the fields to be overwritten
|
147
|
+
# @return [TraceDigest] returns a copy of this object with the `field_value_pairs` modified
|
148
|
+
def merge(field_value_pairs)
|
149
|
+
# DEV: Because we want to sometimes freeze the values provided to `TraceDigest`, it's best
|
150
|
+
# DEV: to let `#initialize` decide how to handle each field, instead of duplicating that logic here.
|
151
|
+
TraceDigest.new(
|
152
|
+
**{
|
153
|
+
span_id: span_id,
|
154
|
+
span_name: span_name,
|
155
|
+
span_resource: span_resource,
|
156
|
+
span_service: span_service,
|
157
|
+
span_type: span_type,
|
158
|
+
trace_distributed_tags: trace_distributed_tags,
|
159
|
+
trace_hostname: trace_hostname,
|
160
|
+
trace_id: trace_id,
|
161
|
+
trace_name: trace_name,
|
162
|
+
trace_origin: trace_origin,
|
163
|
+
trace_process_id: trace_process_id,
|
164
|
+
trace_resource: trace_resource,
|
165
|
+
trace_runtime_id: trace_runtime_id,
|
166
|
+
trace_sampling_priority: trace_sampling_priority,
|
167
|
+
trace_service: trace_service,
|
168
|
+
trace_distributed_id: trace_distributed_id,
|
169
|
+
trace_flags: trace_flags,
|
170
|
+
trace_state: trace_state,
|
171
|
+
trace_state_unknown_fields: trace_state_unknown_fields,
|
172
|
+
}.merge!(field_value_pairs)
|
173
|
+
)
|
174
|
+
end
|
144
175
|
end
|
145
176
|
end
|
146
177
|
end
|
@@ -69,6 +69,7 @@ module Datadog
|
|
69
69
|
Datadog.logger.debug { "Starting thread for: #{self}" }
|
70
70
|
@worker = Thread.new { perform }
|
71
71
|
@worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
72
|
+
@worker.thread_variable_set(:fork_safe, true)
|
72
73
|
|
73
74
|
nil
|
74
75
|
end
|
data/lib/ddtrace/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddtrace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.2.
|
33
|
+
version: 3.2.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.2.
|
40
|
+
version: 3.2.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: libddwaf
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
75
|
+
version: 0.5.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
82
|
+
version: 0.5.0
|
83
83
|
description: |
|
84
84
|
ddtrace is Datadog's tracing client for Ruby. It is used to trace requests
|
85
85
|
as they flow across web servers, databases and microservices so that developers
|
@@ -890,7 +890,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
890
890
|
- !ruby/object:Gem::Version
|
891
891
|
version: 2.0.0
|
892
892
|
requirements: []
|
893
|
-
rubygems_version: 3.4.
|
893
|
+
rubygems_version: 3.4.21
|
894
894
|
signing_key:
|
895
895
|
specification_version: 4
|
896
896
|
summary: Datadog tracing code for your Ruby applications
|