datadog 2.45.0 → 2.46.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 +25 -2
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +4 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +2 -0
- data/ext/datadog_profiling_native_extension/profiling.c +6 -0
- data/ext/libdatadog_api/di.c +30 -5
- data/ext/libdatadog_api/extconf.rb +2 -0
- data/ext/libdatadog_api/otel_thread_context.c +20 -14
- data/ext/libdatadog_api/process_discovery.c +15 -1
- data/ext/libdatadog_api/trace_exporter.c +105 -25
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/core/configuration/components.rb +29 -8
- data/lib/datadog/core/configuration/supported_configurations.rb +5 -2
- data/lib/datadog/core/process_discovery.rb +5 -1
- data/lib/datadog/core/remote/client/capabilities.rb +34 -29
- data/lib/datadog/core/remote/component.rb +28 -12
- data/lib/datadog/core/remote/dispatcher.rb +13 -3
- data/lib/datadog/di/boot.rb +1 -0
- data/lib/datadog/di/capture_expression_evaluator/result.rb +30 -0
- data/lib/datadog/di/capture_expression_evaluator.rb +39 -9
- data/lib/datadog/di/component.rb +38 -3
- data/lib/datadog/di/configuration.rb +53 -2
- data/lib/datadog/di/context.rb +7 -2
- data/lib/datadog/di/contrib/active_record.rb +8 -2
- data/lib/datadog/di/evaluation_failure.rb +28 -0
- data/lib/datadog/di/guardrails_telemetry/reason.rb +87 -0
- data/lib/datadog/di/guardrails_telemetry.rb +203 -0
- data/lib/datadog/di/instrumenter.rb +65 -15
- data/lib/datadog/di/logger.rb +30 -8
- data/lib/datadog/di/probe_manager.rb +48 -5
- data/lib/datadog/di/probe_notification_builder.rb +28 -26
- data/lib/datadog/di/probe_notifier_worker.rb +56 -6
- data/lib/datadog/di/serializer.rb +130 -54
- data/lib/datadog/di/snapshot_event.rb +38 -0
- data/lib/datadog/di/transport/http.rb +13 -3
- data/lib/datadog/di/transport/input.rb +32 -7
- data/lib/datadog/open_feature/activation.rb +268 -0
- data/lib/datadog/open_feature/component.rb +31 -15
- data/lib/datadog/open_feature/provider.rb +282 -5
- data/lib/datadog/open_feature.rb +31 -1
- data/lib/datadog/tracing/component.rb +14 -0
- data/lib/datadog/tracing/configuration/settings.rb +3 -1
- data/lib/datadog/tracing/otel_thread_context.rb +3 -5
- data/lib/datadog/tracing/transport/http/telemetry.rb +94 -0
- data/lib/datadog/tracing/transport/http/traces.rb +2 -0
- data/lib/datadog/tracing/transport/native/telemetry.rb +17 -0
- data/lib/datadog/tracing/transport/native.rb +16 -1
- data/lib/datadog/tracing/transport/telemetry.rb +62 -0
- data/lib/datadog/tracing/transport/traces.rb +82 -15
- data/lib/datadog/version.rb +1 -1
- metadata +16 -7
|
@@ -6,6 +6,7 @@ require_relative "../../core/transport/request"
|
|
|
6
6
|
require_relative "../../core/transport/transport"
|
|
7
7
|
require_relative "../../core/utils/enumerable_compat"
|
|
8
8
|
require_relative "http/client"
|
|
9
|
+
require_relative "http/telemetry"
|
|
9
10
|
require_relative "serializable_trace"
|
|
10
11
|
require_relative "span_events_negotiation"
|
|
11
12
|
require_relative "trace_formatter"
|
|
@@ -26,6 +27,30 @@ module Datadog
|
|
|
26
27
|
|
|
27
28
|
# Traces request
|
|
28
29
|
class Request < Datadog::Core::Transport::Request
|
|
30
|
+
attr_reader :http_status, :http_success
|
|
31
|
+
attr_writer :capture_telemetry
|
|
32
|
+
|
|
33
|
+
def initialize(parcel = nil)
|
|
34
|
+
super
|
|
35
|
+
@http_status = nil
|
|
36
|
+
@http_success = nil
|
|
37
|
+
@capture_telemetry = false
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Built-in adapters return integer codes. Custom status inspection is
|
|
41
|
+
# best-effort: telemetry must not change trace delivery.
|
|
42
|
+
def capture_status(response)
|
|
43
|
+
return unless @capture_telemetry
|
|
44
|
+
|
|
45
|
+
if response.respond_to?(:code)
|
|
46
|
+
code = response.code
|
|
47
|
+
@http_status = code if code.is_a?(Integer) && code.between?(100, 999)
|
|
48
|
+
end
|
|
49
|
+
@http_success = response.ok? if @http_status.nil? && response.respond_to?(:ok?)
|
|
50
|
+
nil
|
|
51
|
+
rescue
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
29
54
|
end
|
|
30
55
|
|
|
31
56
|
# Traces response
|
|
@@ -48,44 +73,65 @@ module Datadog
|
|
|
48
73
|
#
|
|
49
74
|
# @param encoder [Datadog::Core::Encoding::Encoder]
|
|
50
75
|
# @param logger [Datadog::Core::Logger]
|
|
51
|
-
# @param
|
|
52
|
-
|
|
76
|
+
# @param native_events_supported [Boolean] whether to encode native span events
|
|
77
|
+
# @param max_size [Integer] maximum acceptable payload size in bytes
|
|
78
|
+
# @param telemetry [HTTP::Telemetry::Batch, nil] optional per-send accounting batch
|
|
79
|
+
def initialize(encoder, logger:, native_events_supported:, max_size: DEFAULT_MAX_PAYLOAD_SIZE, telemetry: nil)
|
|
53
80
|
@encoder = encoder
|
|
54
81
|
@logger = logger
|
|
55
82
|
@native_events_supported = native_events_supported
|
|
56
83
|
@max_size = max_size
|
|
84
|
+
@batch = telemetry
|
|
57
85
|
end
|
|
58
86
|
|
|
59
87
|
# Encodes a list of traces in chunks.
|
|
60
88
|
# Before serializing, all traces are normalized. Trace nesting is not changed.
|
|
61
89
|
#
|
|
62
90
|
# @param traces [Enumerable<Trace>] list of traces
|
|
63
|
-
# @return [Enumerable
|
|
64
|
-
#
|
|
91
|
+
# @return [Enumerable<Array>] tuples of encoded bytes and trace count,
|
|
92
|
+
# plus span count when telemetry accounting is enabled
|
|
65
93
|
def encode_in_chunks(traces)
|
|
94
|
+
span_counts = [] if @batch
|
|
66
95
|
encoded_traces = Core::Utils::EnumerableCompat.filter_map(traces) do |trace|
|
|
67
|
-
encode_one(trace)
|
|
96
|
+
encoded = encode_one(trace)
|
|
97
|
+
span_counts << trace.length if encoded && span_counts
|
|
98
|
+
encoded
|
|
68
99
|
end
|
|
69
100
|
|
|
70
101
|
Datadog::Core::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
|
|
71
|
-
[
|
|
102
|
+
payload = [join(chunk), chunk.size]
|
|
103
|
+
payload << span_counts.shift(chunk.size).sum if span_counts
|
|
104
|
+
payload
|
|
72
105
|
end
|
|
73
106
|
end
|
|
74
107
|
|
|
75
108
|
private
|
|
76
109
|
|
|
110
|
+
def join(chunk)
|
|
111
|
+
encoder.join(chunk)
|
|
112
|
+
rescue
|
|
113
|
+
@batch&.serialization_failed
|
|
114
|
+
raise
|
|
115
|
+
end
|
|
116
|
+
|
|
77
117
|
def encode_one(trace)
|
|
78
|
-
encoded =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
118
|
+
encoded = begin
|
|
119
|
+
Encoder.encode_trace(
|
|
120
|
+
encoder,
|
|
121
|
+
trace,
|
|
122
|
+
logger: logger,
|
|
123
|
+
native_events_supported: @native_events_supported
|
|
124
|
+
)
|
|
125
|
+
rescue
|
|
126
|
+
@batch&.serialization_failed
|
|
127
|
+
raise
|
|
128
|
+
end
|
|
84
129
|
|
|
85
130
|
if encoded.size > max_size
|
|
86
131
|
# This single trace is too large, we can't flush it
|
|
87
132
|
logger.debug { "Dropping trace. Payload too large: '#{trace.inspect}'" }
|
|
88
133
|
Datadog.health_metrics.transport_trace_too_large(1)
|
|
134
|
+
@batch&.record_oversized_drop(trace.length)
|
|
89
135
|
|
|
90
136
|
return nil
|
|
91
137
|
end
|
|
@@ -122,19 +168,40 @@ module Datadog
|
|
|
122
168
|
include SpanEventsNegotiation
|
|
123
169
|
self.http_client_class = Tracing::Transport::HTTP::Client
|
|
124
170
|
|
|
171
|
+
def initialize(apis, default_api, logger:)
|
|
172
|
+
super
|
|
173
|
+
@reporter = nil
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Reconfiguration can retain this transport, so rebind its reporter to
|
|
177
|
+
# the new telemetry client. Each later send creates its own accounting batch.
|
|
178
|
+
def telemetry=(telemetry_client)
|
|
179
|
+
if (reporter = @reporter)
|
|
180
|
+
reporter.client = telemetry_client
|
|
181
|
+
else
|
|
182
|
+
@reporter = HTTP::Telemetry.new(telemetry_client)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
125
186
|
def send_traces(traces)
|
|
126
187
|
encoder = current_api.encoder
|
|
188
|
+
native_events_supported = native_events_supported?
|
|
189
|
+
batch = @reporter&.batch(traces)
|
|
127
190
|
chunker = Datadog::Tracing::Transport::Traces::Chunker.new(
|
|
128
191
|
encoder,
|
|
129
192
|
logger: logger,
|
|
130
|
-
native_events_supported: native_events_supported
|
|
193
|
+
native_events_supported: native_events_supported,
|
|
194
|
+
telemetry: batch,
|
|
131
195
|
)
|
|
132
196
|
|
|
133
|
-
responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
|
|
197
|
+
responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count, span_count|
|
|
134
198
|
request = Request.new(Parcel.new(encoded_traces, trace_count: trace_count))
|
|
199
|
+
request.capture_telemetry = true if batch
|
|
135
200
|
|
|
136
201
|
client.send_request(:traces, request).tap do |response|
|
|
137
|
-
|
|
202
|
+
fallback = downgrade?(response)
|
|
203
|
+
batch&.sent(request, response, trace_count, span_count, encoded_traces.bytesize, fallback: fallback)
|
|
204
|
+
if fallback
|
|
138
205
|
downgrade!
|
|
139
206
|
return send_traces(traces)
|
|
140
207
|
end
|
data/lib/datadog/version.rb
CHANGED
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.46.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Datadog, Inc.
|
|
@@ -32,7 +32,7 @@ dependencies:
|
|
|
32
32
|
version: '3.5'
|
|
33
33
|
- - ">="
|
|
34
34
|
- !ruby/object:Gem::Version
|
|
35
|
-
version: 3.5.
|
|
35
|
+
version: 3.5.6
|
|
36
36
|
type: :runtime
|
|
37
37
|
prerelease: false
|
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -42,7 +42,7 @@ dependencies:
|
|
|
42
42
|
version: '3.5'
|
|
43
43
|
- - ">="
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: 3.5.
|
|
45
|
+
version: 3.5.6
|
|
46
46
|
- !ruby/object:Gem::Dependency
|
|
47
47
|
name: libddwaf
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -63,14 +63,14 @@ dependencies:
|
|
|
63
63
|
requirements:
|
|
64
64
|
- - "~>"
|
|
65
65
|
- !ruby/object:Gem::Version
|
|
66
|
-
version:
|
|
66
|
+
version: 46.0.0.1.1
|
|
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: 46.0.0.1.1
|
|
74
74
|
- !ruby/object:Gem::Dependency
|
|
75
75
|
name: logger
|
|
76
76
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -536,6 +536,7 @@ files:
|
|
|
536
536
|
- lib/datadog/di/boot.rb
|
|
537
537
|
- lib/datadog/di/capture_expression.rb
|
|
538
538
|
- lib/datadog/di/capture_expression_evaluator.rb
|
|
539
|
+
- lib/datadog/di/capture_expression_evaluator/result.rb
|
|
539
540
|
- lib/datadog/di/capture_limits.rb
|
|
540
541
|
- lib/datadog/di/code_tracker.rb
|
|
541
542
|
- lib/datadog/di/component.rb
|
|
@@ -549,8 +550,11 @@ files:
|
|
|
549
550
|
- lib/datadog/di/el/evaluator.rb
|
|
550
551
|
- lib/datadog/di/el/expression.rb
|
|
551
552
|
- lib/datadog/di/error.rb
|
|
553
|
+
- lib/datadog/di/evaluation_failure.rb
|
|
552
554
|
- lib/datadog/di/extensions.rb
|
|
553
555
|
- lib/datadog/di/fatal_exceptions.rb
|
|
556
|
+
- lib/datadog/di/guardrails_telemetry.rb
|
|
557
|
+
- lib/datadog/di/guardrails_telemetry/reason.rb
|
|
554
558
|
- lib/datadog/di/instrumenter.rb
|
|
555
559
|
- lib/datadog/di/logger.rb
|
|
556
560
|
- lib/datadog/di/preload.rb
|
|
@@ -566,6 +570,7 @@ files:
|
|
|
566
570
|
- lib/datadog/di/redactor.rb
|
|
567
571
|
- lib/datadog/di/remote.rb
|
|
568
572
|
- lib/datadog/di/serializer.rb
|
|
573
|
+
- lib/datadog/di/snapshot_event.rb
|
|
569
574
|
- lib/datadog/di/transport/diagnostics.rb
|
|
570
575
|
- lib/datadog/di/transport/http.rb
|
|
571
576
|
- lib/datadog/di/transport/http/diagnostics.rb
|
|
@@ -586,6 +591,7 @@ files:
|
|
|
586
591
|
- lib/datadog/kit/identity.rb
|
|
587
592
|
- lib/datadog/kit/tracing/method_tracer.rb
|
|
588
593
|
- lib/datadog/open_feature.rb
|
|
594
|
+
- lib/datadog/open_feature/activation.rb
|
|
589
595
|
- lib/datadog/open_feature/agentless/configuration_source.rb
|
|
590
596
|
- lib/datadog/open_feature/agentless/parser.rb
|
|
591
597
|
- lib/datadog/open_feature/agentless/response.rb
|
|
@@ -1168,6 +1174,7 @@ files:
|
|
|
1168
1174
|
- lib/datadog/tracing/transport/http.rb
|
|
1169
1175
|
- lib/datadog/tracing/transport/http/client.rb
|
|
1170
1176
|
- lib/datadog/tracing/transport/http/statistics.rb
|
|
1177
|
+
- lib/datadog/tracing/transport/http/telemetry.rb
|
|
1171
1178
|
- lib/datadog/tracing/transport/http/traces.rb
|
|
1172
1179
|
- lib/datadog/tracing/transport/io.rb
|
|
1173
1180
|
- lib/datadog/tracing/transport/io/client.rb
|
|
@@ -1175,9 +1182,11 @@ files:
|
|
|
1175
1182
|
- lib/datadog/tracing/transport/io/traces.rb
|
|
1176
1183
|
- lib/datadog/tracing/transport/native.rb
|
|
1177
1184
|
- lib/datadog/tracing/transport/native/response.rb
|
|
1185
|
+
- lib/datadog/tracing/transport/native/telemetry.rb
|
|
1178
1186
|
- lib/datadog/tracing/transport/serializable_trace.rb
|
|
1179
1187
|
- lib/datadog/tracing/transport/span_events_negotiation.rb
|
|
1180
1188
|
- lib/datadog/tracing/transport/statistics.rb
|
|
1189
|
+
- lib/datadog/tracing/transport/telemetry.rb
|
|
1181
1190
|
- lib/datadog/tracing/transport/trace_formatter.rb
|
|
1182
1191
|
- lib/datadog/tracing/transport/traces.rb
|
|
1183
1192
|
- lib/datadog/tracing/utils.rb
|
|
@@ -1190,8 +1199,8 @@ licenses:
|
|
|
1190
1199
|
- Apache-2.0
|
|
1191
1200
|
metadata:
|
|
1192
1201
|
allowed_push_host: https://rubygems.org
|
|
1193
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
|
1194
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
|
1202
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.46.0/CHANGELOG.md
|
|
1203
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.46.0
|
|
1195
1204
|
post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
|
|
1196
1205
|
rdoc_options: []
|
|
1197
1206
|
require_paths:
|