ddtrace 1.16.0 → 1.18.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|