datadog 2.23.0 → 2.25.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 +67 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +17 -5
- data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +4 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/lib/datadog/ai_guard/api_client.rb +82 -0
- data/lib/datadog/ai_guard/component.rb +42 -0
- data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
- data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
- data/lib/datadog/ai_guard/configuration.rb +11 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
- data/lib/datadog/ai_guard/evaluation.rb +72 -0
- data/lib/datadog/ai_guard/ext.rb +16 -0
- data/lib/datadog/ai_guard.rb +153 -0
- data/lib/datadog/appsec/context.rb +2 -1
- data/lib/datadog/appsec/remote.rb +5 -12
- data/lib/datadog/appsec/security_engine/engine.rb +3 -3
- data/lib/datadog/appsec/security_engine/result.rb +2 -1
- data/lib/datadog/appsec/security_engine/runner.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +6 -0
- data/lib/datadog/core/configuration/config_helper.rb +1 -1
- data/lib/datadog/core/configuration/deprecations.rb +2 -2
- data/lib/datadog/core/configuration/option_definition.rb +4 -2
- data/lib/datadog/core/configuration/options.rb +8 -5
- data/lib/datadog/core/configuration/settings.rb +14 -3
- data/lib/datadog/core/configuration/supported_configurations.rb +8 -1
- data/lib/datadog/core/environment/cgroup.rb +52 -25
- data/lib/datadog/core/environment/container.rb +140 -46
- data/lib/datadog/core/environment/ext.rb +1 -0
- data/lib/datadog/core/environment/process.rb +9 -1
- data/lib/datadog/core/error.rb +6 -6
- data/lib/datadog/core/pin.rb +4 -0
- data/lib/datadog/core/rate_limiter.rb +9 -1
- data/lib/datadog/core/remote/client.rb +14 -6
- data/lib/datadog/core/remote/component.rb +6 -4
- data/lib/datadog/core/remote/configuration/content.rb +15 -2
- data/lib/datadog/core/remote/configuration/digest.rb +14 -7
- data/lib/datadog/core/remote/configuration/repository.rb +1 -1
- data/lib/datadog/core/remote/configuration/target.rb +13 -6
- data/lib/datadog/core/remote/transport/config.rb +3 -16
- data/lib/datadog/core/remote/transport/http/config.rb +4 -44
- data/lib/datadog/core/remote/transport/http/negotiation.rb +0 -39
- data/lib/datadog/core/remote/transport/http.rb +13 -24
- data/lib/datadog/core/remote/transport/negotiation.rb +7 -16
- data/lib/datadog/core/semaphore.rb +1 -4
- data/lib/datadog/core/telemetry/component.rb +52 -13
- data/lib/datadog/core/telemetry/event/app_started.rb +36 -1
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
- data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
- data/lib/datadog/core/telemetry/request.rb +17 -3
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +2 -32
- data/lib/datadog/core/telemetry/transport/http.rb +21 -16
- data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -10
- data/lib/datadog/core/telemetry/worker.rb +88 -32
- data/lib/datadog/core/transport/ext.rb +2 -0
- data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
- data/lib/datadog/core/transport/http/api/instance.rb +4 -21
- data/lib/datadog/core/transport/http/builder.rb +9 -5
- data/lib/datadog/core/transport/http/client.rb +19 -8
- data/lib/datadog/core/transport/http.rb +22 -19
- data/lib/datadog/core/transport/response.rb +12 -1
- data/lib/datadog/core/transport/transport.rb +90 -0
- data/lib/datadog/core/utils/only_once_successful.rb +2 -0
- data/lib/datadog/core/utils/safe_dup.rb +2 -2
- data/lib/datadog/core/utils/sequence.rb +2 -0
- data/lib/datadog/core/utils/time.rb +1 -1
- data/lib/datadog/core/workers/async.rb +10 -1
- data/lib/datadog/core/workers/interval_loop.rb +44 -3
- data/lib/datadog/core/workers/polling.rb +2 -0
- data/lib/datadog/core/workers/queue.rb +100 -1
- data/lib/datadog/data_streams/processor.rb +1 -1
- data/lib/datadog/data_streams/transport/http/stats.rb +1 -36
- data/lib/datadog/data_streams/transport/http.rb +5 -6
- data/lib/datadog/data_streams/transport/stats.rb +3 -17
- data/lib/datadog/di/boot.rb +4 -2
- data/lib/datadog/di/contrib/active_record.rb +30 -5
- data/lib/datadog/di/el/compiler.rb +8 -4
- data/lib/datadog/di/error.rb +5 -0
- data/lib/datadog/di/instrumenter.rb +26 -7
- data/lib/datadog/di/logger.rb +2 -2
- data/lib/datadog/di/probe_builder.rb +2 -1
- data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
- data/lib/datadog/di/probe_manager.rb +37 -31
- data/lib/datadog/di/probe_notification_builder.rb +15 -2
- data/lib/datadog/di/probe_notifier_worker.rb +5 -5
- data/lib/datadog/di/remote.rb +89 -84
- data/lib/datadog/di/transport/diagnostics.rb +7 -35
- data/lib/datadog/di/transport/http/diagnostics.rb +1 -31
- data/lib/datadog/di/transport/http/input.rb +1 -31
- data/lib/datadog/di/transport/http.rb +28 -17
- data/lib/datadog/di/transport/input.rb +7 -34
- data/lib/datadog/di.rb +61 -5
- data/lib/datadog/error_tracking/filters.rb +2 -2
- data/lib/datadog/kit/appsec/events/v2.rb +2 -3
- data/lib/datadog/open_feature/evaluation_engine.rb +2 -1
- data/lib/datadog/open_feature/remote.rb +3 -10
- data/lib/datadog/open_feature/transport.rb +9 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
- data/lib/datadog/opentelemetry/configuration/settings.rb +2 -2
- data/lib/datadog/opentelemetry/metrics.rb +21 -14
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +5 -8
- data/lib/datadog/profiling/collectors/code_provenance.rb +27 -2
- data/lib/datadog/profiling/collectors/info.rb +5 -4
- data/lib/datadog/profiling/component.rb +12 -11
- data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
- data/lib/datadog/profiling/http_transport.rb +4 -1
- data/lib/datadog/tracing/contrib/extensions.rb +10 -2
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +31 -32
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +2 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +6 -3
- data/lib/datadog/tracing/contrib/waterdrop.rb +4 -0
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +3 -2
- data/lib/datadog/tracing/remote.rb +1 -9
- data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +20 -9
- data/lib/datadog/tracing/trace_operation.rb +44 -6
- data/lib/datadog/tracing/tracer.rb +42 -16
- data/lib/datadog/tracing/transport/http/traces.rb +2 -50
- data/lib/datadog/tracing/transport/http.rb +15 -9
- data/lib/datadog/tracing/transport/io/client.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +6 -66
- data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
- data/lib/datadog/tracing/writer.rb +1 -0
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +1 -0
- metadata +24 -17
- data/lib/datadog/core/remote/transport/http/api.rb +0 -53
- data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
- data/lib/datadog/core/transport/http/api/spec.rb +0 -36
- data/lib/datadog/data_streams/transport/http/api.rb +0 -33
- data/lib/datadog/data_streams/transport/http/client.rb +0 -21
- data/lib/datadog/di/transport/http/api.rb +0 -42
- data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
- data/lib/datadog/tracing/transport/http/api.rb +0 -44
|
@@ -129,7 +129,6 @@ module Datadog
|
|
|
129
129
|
# @yield Optional block where new newly created {Datadog::Tracing::SpanOperation} captures the execution.
|
|
130
130
|
# @yieldparam [Datadog::Tracing::SpanOperation] span_op the newly created and active [Datadog::Tracing::SpanOperation]
|
|
131
131
|
# @yieldparam [Datadog::Tracing::TraceOperation] trace_op the active [Datadog::Tracing::TraceOperation]
|
|
132
|
-
# rubocop:disable Metrics/MethodLength
|
|
133
132
|
def trace(
|
|
134
133
|
name,
|
|
135
134
|
continue_from: nil,
|
|
@@ -241,10 +240,21 @@ module Datadog
|
|
|
241
240
|
trace.to_correlation
|
|
242
241
|
end
|
|
243
242
|
|
|
244
|
-
# Setup a new trace to continue from where another
|
|
243
|
+
# Setup a new trace execution context to continue from where another
|
|
245
244
|
# trace left off.
|
|
245
|
+
# This is useful to continue distributed or async traces.
|
|
246
246
|
#
|
|
247
|
-
#
|
|
247
|
+
# The first span created in the restored context is a direct child of the
|
|
248
|
+
# active span from when the {Datadog::Tracing::TraceDigest} was created.
|
|
249
|
+
#
|
|
250
|
+
# When no block is given, the trace context is restored in the current thread.
|
|
251
|
+
# It remains active until the first span created in this restored context is finished.
|
|
252
|
+
# After that, if a new span is created, it start a new, unrelated trace.
|
|
253
|
+
#
|
|
254
|
+
# When a block is given, the trace context is restored inside the block execution.
|
|
255
|
+
# It remains active until the block ends, even when the first span created inside
|
|
256
|
+
# the block finishes. This means that multiple spans can be direct children of the
|
|
257
|
+
# active span from when the {Datadog::Tracing::TraceDigest} was created.
|
|
248
258
|
#
|
|
249
259
|
# @param [Datadog::Tracing::TraceDigest] digest continue from the {Datadog::Tracing::TraceDigest}.
|
|
250
260
|
# @param [Thread] key Thread to retrieve trace from. Defaults to current thread. For internal use only.
|
|
@@ -260,13 +270,32 @@ module Datadog
|
|
|
260
270
|
# Start a new trace from the digest
|
|
261
271
|
context = call_context(key)
|
|
262
272
|
original_trace = active_trace(key)
|
|
263
|
-
trace
|
|
273
|
+
# When we want the trace to be bound to a block, we cannot let
|
|
274
|
+
# it auto finish when the local root span finishes. This would
|
|
275
|
+
# create mutiple traces inside the block. Instead, we'll
|
|
276
|
+
# expliclity finish the trace after the block finishes.
|
|
277
|
+
auto_finish = !block
|
|
278
|
+
|
|
279
|
+
trace = start_trace(continue_from: digest, auto_finish: auto_finish)
|
|
264
280
|
|
|
265
281
|
# If block hasn't been given; we need to manually deactivate
|
|
266
282
|
# this trace. Subscribe to the trace finished event to do this.
|
|
267
283
|
subscribe_trace_deactivation!(context, trace, original_trace) unless block
|
|
268
284
|
|
|
269
|
-
|
|
285
|
+
if block
|
|
286
|
+
# When a block is given, the trace will be active until the block finishes.
|
|
287
|
+
context.activate!(trace) do
|
|
288
|
+
yield
|
|
289
|
+
ensure # We have to flush even when an error occurs
|
|
290
|
+
# On block completion, force the trace to finish and flush its finished spans.
|
|
291
|
+
# Unfinished spans are lost as the {TraceOperation} has ended.
|
|
292
|
+
trace.finish!
|
|
293
|
+
flush_trace(trace)
|
|
294
|
+
end
|
|
295
|
+
else
|
|
296
|
+
# Otherwise, the trace will be bound to the current thread after this point
|
|
297
|
+
context.activate!(trace)
|
|
298
|
+
end
|
|
270
299
|
end
|
|
271
300
|
|
|
272
301
|
# Sample a span, tagging the trace as appropriate.
|
|
@@ -329,7 +358,7 @@ module Datadog
|
|
|
329
358
|
@provider.context(key)
|
|
330
359
|
end
|
|
331
360
|
|
|
332
|
-
def build_trace(digest
|
|
361
|
+
def build_trace(digest, auto_finish)
|
|
333
362
|
# Resolve hostname if configured
|
|
334
363
|
hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
|
|
335
364
|
hostname = (hostname && !hostname.empty?) ? hostname : nil
|
|
@@ -353,7 +382,8 @@ module Datadog
|
|
|
353
382
|
trace_state_unknown_fields: digest.trace_state_unknown_fields,
|
|
354
383
|
remote_parent: digest.span_remote,
|
|
355
384
|
tracer: self,
|
|
356
|
-
baggage: digest.baggage
|
|
385
|
+
baggage: digest.baggage,
|
|
386
|
+
auto_finish: auto_finish
|
|
357
387
|
)
|
|
358
388
|
else
|
|
359
389
|
TraceOperation.new(
|
|
@@ -362,13 +392,12 @@ module Datadog
|
|
|
362
392
|
profiling_enabled: profiling_enabled,
|
|
363
393
|
apm_tracing_enabled: apm_tracing_enabled,
|
|
364
394
|
remote_parent: false,
|
|
365
|
-
tracer: self
|
|
395
|
+
tracer: self,
|
|
396
|
+
auto_finish: auto_finish
|
|
366
397
|
)
|
|
367
398
|
end
|
|
368
399
|
end
|
|
369
|
-
# rubocop:enable Metrics/MethodLength
|
|
370
400
|
|
|
371
|
-
# rubocop:disable Metrics/MethodLength
|
|
372
401
|
def bind_trace_events!(trace_op)
|
|
373
402
|
events = trace_op.send(:events)
|
|
374
403
|
|
|
@@ -387,13 +416,12 @@ module Datadog
|
|
|
387
416
|
flush_trace(event_trace_op)
|
|
388
417
|
end
|
|
389
418
|
end
|
|
390
|
-
# rubocop:enable Metrics/MethodLength
|
|
391
419
|
|
|
392
420
|
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
|
393
421
|
# @return [TraceOperation]
|
|
394
|
-
def start_trace(continue_from: nil)
|
|
422
|
+
def start_trace(continue_from: nil, auto_finish: true)
|
|
395
423
|
# Build a new trace using digest if provided.
|
|
396
|
-
trace = build_trace(continue_from)
|
|
424
|
+
trace = build_trace(continue_from, auto_finish)
|
|
397
425
|
|
|
398
426
|
# Bind trace events: sample trace, set default service, flush spans.
|
|
399
427
|
bind_trace_events!(trace)
|
|
@@ -402,7 +430,6 @@ module Datadog
|
|
|
402
430
|
end
|
|
403
431
|
|
|
404
432
|
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
|
405
|
-
# rubocop:disable Metrics/MethodLength
|
|
406
433
|
def start_span(
|
|
407
434
|
name,
|
|
408
435
|
continue_from: nil,
|
|
@@ -454,9 +481,8 @@ module Datadog
|
|
|
454
481
|
span
|
|
455
482
|
end
|
|
456
483
|
end
|
|
457
|
-
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
|
458
|
-
# rubocop:enable Metrics/MethodLength
|
|
459
484
|
|
|
485
|
+
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
|
460
486
|
def resolve_tags(tags, service)
|
|
461
487
|
merged_tags = if @tags.any? && tags
|
|
462
488
|
# Combine default tags with provided tags,
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
require 'json'
|
|
4
4
|
|
|
5
|
-
require_relative '../traces'
|
|
6
|
-
require_relative 'client'
|
|
7
5
|
require_relative '../../../core/transport/http/response'
|
|
8
6
|
require_relative '../../../core/transport/http/api/endpoint'
|
|
9
|
-
require_relative '../../../core/transport/http/api/spec'
|
|
10
7
|
require_relative '../../../core/transport/http/api/instance'
|
|
8
|
+
require_relative '../traces'
|
|
11
9
|
|
|
12
10
|
module Datadog
|
|
13
11
|
module Tracing
|
|
@@ -27,58 +25,15 @@ module Datadog
|
|
|
27
25
|
end
|
|
28
26
|
end
|
|
29
27
|
|
|
30
|
-
# Extensions for HTTP client
|
|
31
|
-
module Client
|
|
32
|
-
def send_traces_payload(request)
|
|
33
|
-
send_request(request) do |api, env|
|
|
34
|
-
api.send_traces(env)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
28
|
module API
|
|
40
|
-
# HTTP API Spec
|
|
41
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
42
|
-
attr_accessor :traces
|
|
43
|
-
|
|
44
|
-
def send_traces(env, &block)
|
|
45
|
-
raise Core::Transport::HTTP::API::Spec::EndpointNotDefinedError.new('traces', self) if traces.nil?
|
|
46
|
-
|
|
47
|
-
traces.call(env, &block)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def encoder
|
|
51
|
-
traces.encoder
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# HTTP API Instance
|
|
56
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
57
|
-
def send_traces(env)
|
|
58
|
-
unless spec.is_a?(Traces::API::Spec)
|
|
59
|
-
raise Core::Transport::HTTP::API::Instance::EndpointNotSupportedError.new(
|
|
60
|
-
'traces', self
|
|
61
|
-
)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
spec.send_traces(env) do |request_env|
|
|
65
|
-
call(request_env)
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
29
|
# Endpoint for submitting trace data
|
|
71
30
|
class Endpoint < Datadog::Core::Transport::HTTP::API::Endpoint
|
|
72
31
|
HEADER_CONTENT_TYPE = 'Content-Type'
|
|
73
32
|
HEADER_TRACE_COUNT = 'X-Datadog-Trace-Count'
|
|
74
33
|
SERVICE_RATE_KEY = 'rate_by_service'
|
|
75
34
|
|
|
76
|
-
attr_reader \
|
|
77
|
-
:encoder
|
|
78
|
-
|
|
79
35
|
def initialize(path, encoder, options = {})
|
|
80
|
-
super(:post, path)
|
|
81
|
-
@encoder = encoder
|
|
36
|
+
super(:post, path, encoder: encoder)
|
|
82
37
|
@service_rates = options.fetch(:service_rates, false)
|
|
83
38
|
end
|
|
84
39
|
|
|
@@ -111,9 +66,6 @@ module Datadog
|
|
|
111
66
|
end
|
|
112
67
|
end
|
|
113
68
|
end
|
|
114
|
-
|
|
115
|
-
# Add traces behavior to transport components
|
|
116
|
-
HTTP::Client.include(Traces::Client)
|
|
117
69
|
end
|
|
118
70
|
end
|
|
119
71
|
end
|
|
@@ -1,17 +1,28 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../core/encoding'
|
|
3
4
|
require_relative '../../core/environment/container'
|
|
4
5
|
require_relative '../../core/environment/ext'
|
|
5
6
|
require_relative '../../core/transport/ext'
|
|
6
7
|
require_relative '../../core/transport/http'
|
|
7
|
-
require_relative 'http/
|
|
8
|
-
require_relative '../../../datadog/version'
|
|
8
|
+
require_relative 'http/traces'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module Tracing
|
|
12
12
|
module Transport
|
|
13
13
|
# Namespace for HTTP transport components
|
|
14
14
|
module HTTP
|
|
15
|
+
V4 = Traces::API::Endpoint.new(
|
|
16
|
+
'/v0.4/traces',
|
|
17
|
+
Core::Encoding::MsgpackEncoder,
|
|
18
|
+
service_rates: true
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
V3 = Traces::API::Endpoint.new(
|
|
22
|
+
'/v0.3/traces',
|
|
23
|
+
Core::Encoding::MsgpackEncoder,
|
|
24
|
+
)
|
|
25
|
+
|
|
15
26
|
module_function
|
|
16
27
|
|
|
17
28
|
# Builds a new Transport::HTTP::Client with default settings
|
|
@@ -19,20 +30,15 @@ module Datadog
|
|
|
19
30
|
def default(
|
|
20
31
|
agent_settings:,
|
|
21
32
|
logger: Datadog.logger,
|
|
22
|
-
api_version: nil,
|
|
23
33
|
headers: nil
|
|
24
34
|
)
|
|
25
35
|
Core::Transport::HTTP.build(
|
|
26
|
-
api_instance_class: Traces::API::Instance,
|
|
27
36
|
agent_settings: agent_settings,
|
|
28
37
|
logger: logger,
|
|
29
|
-
api_version: api_version,
|
|
30
38
|
headers: headers
|
|
31
39
|
) do |transport|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
|
|
35
|
-
transport.api API::V3, apis[API::V3]
|
|
40
|
+
transport.api 'v0.4', V4, fallback: 'v0.3', default: true
|
|
41
|
+
transport.api 'v0.3', V3
|
|
36
42
|
|
|
37
43
|
# Call block to apply any customization, if provided
|
|
38
44
|
yield(transport) if block_given?
|
|
@@ -42,7 +42,7 @@ module Datadog
|
|
|
42
42
|
response
|
|
43
43
|
rescue => e
|
|
44
44
|
message =
|
|
45
|
-
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
|
45
|
+
"Internal error during IO transport request. Cause: #{e.class.name}: #{e.message} " \
|
|
46
46
|
"Location: #{Array(e.backtrace).first}"
|
|
47
47
|
|
|
48
48
|
# Log error
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
require_relative '../../core/chunker'
|
|
4
4
|
require_relative '../../core/transport/parcel'
|
|
5
5
|
require_relative '../../core/transport/request'
|
|
6
|
+
require_relative '../../core/transport/transport'
|
|
6
7
|
require_relative '../../core/utils/array'
|
|
8
|
+
require_relative 'http/client'
|
|
7
9
|
require_relative 'serializable_trace'
|
|
8
10
|
require_relative 'trace_formatter'
|
|
9
11
|
|
|
@@ -121,16 +123,8 @@ module Datadog
|
|
|
121
123
|
# This class initializes the HTTP client, breaks down large
|
|
122
124
|
# batches of traces into smaller chunks and handles
|
|
123
125
|
# API version downgrade handshake.
|
|
124
|
-
class Transport
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def initialize(apis, default_api, logger: Datadog.logger)
|
|
128
|
-
@apis = apis
|
|
129
|
-
@default_api = default_api
|
|
130
|
-
@logger = logger
|
|
131
|
-
|
|
132
|
-
change_api!(default_api)
|
|
133
|
-
end
|
|
126
|
+
class Transport < Core::Transport::Transport
|
|
127
|
+
self.http_client_class = Tracing::Transport::HTTP::Client
|
|
134
128
|
|
|
135
129
|
def send_traces(traces)
|
|
136
130
|
encoder = current_api.encoder
|
|
@@ -143,7 +137,7 @@ module Datadog
|
|
|
143
137
|
responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
|
|
144
138
|
request = Request.new(EncodedParcel.new(encoded_traces, trace_count))
|
|
145
139
|
|
|
146
|
-
client.
|
|
140
|
+
client.send_request(:traces, request).tap do |response|
|
|
147
141
|
if downgrade?(response)
|
|
148
142
|
downgrade!
|
|
149
143
|
return send_traces(traces)
|
|
@@ -171,35 +165,11 @@ module Datadog
|
|
|
171
165
|
end
|
|
172
166
|
|
|
173
167
|
def stats
|
|
174
|
-
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
def current_api
|
|
178
|
-
apis[@current_api_id]
|
|
168
|
+
client.stats
|
|
179
169
|
end
|
|
180
170
|
|
|
181
171
|
private
|
|
182
172
|
|
|
183
|
-
def downgrade?(response)
|
|
184
|
-
return false unless apis.fallbacks.key?(@current_api_id)
|
|
185
|
-
|
|
186
|
-
response.not_found? || response.unsupported?
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
def downgrade!
|
|
190
|
-
downgrade_api_id = apis.fallbacks[@current_api_id]
|
|
191
|
-
raise NoDowngradeAvailableError, @current_api_id if downgrade_api_id.nil?
|
|
192
|
-
|
|
193
|
-
change_api!(downgrade_api_id)
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
def change_api!(api_id)
|
|
197
|
-
raise UnknownApiVersionError, api_id unless apis.key?(api_id)
|
|
198
|
-
|
|
199
|
-
@current_api_id = api_id
|
|
200
|
-
@client = HTTP::Client.new(current_api, logger: logger)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
173
|
# Queries the agent for native span events serialization support.
|
|
204
174
|
# This changes how the serialization of span events performed.
|
|
205
175
|
def native_events_supported?
|
|
@@ -219,36 +189,6 @@ module Datadog
|
|
|
219
189
|
false
|
|
220
190
|
end
|
|
221
191
|
end
|
|
222
|
-
|
|
223
|
-
# Raised when configured with an unknown API version
|
|
224
|
-
class UnknownApiVersionError < StandardError
|
|
225
|
-
attr_reader :version
|
|
226
|
-
|
|
227
|
-
def initialize(version)
|
|
228
|
-
super
|
|
229
|
-
|
|
230
|
-
@version = version
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
def message
|
|
234
|
-
"No matching transport API for version #{version}!"
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
# Raised when configured with an unknown API version
|
|
239
|
-
class NoDowngradeAvailableError < StandardError
|
|
240
|
-
attr_reader :version
|
|
241
|
-
|
|
242
|
-
def initialize(version)
|
|
243
|
-
super
|
|
244
|
-
|
|
245
|
-
@version = version
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
def message
|
|
249
|
-
"No downgrade from transport API version #{version} is available!"
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
192
|
end
|
|
253
193
|
end
|
|
254
194
|
end
|
|
@@ -21,6 +21,8 @@ module Datadog
|
|
|
21
21
|
:transport,
|
|
22
22
|
:agent_settings
|
|
23
23
|
|
|
24
|
+
# DEV-3.0: change to keyword arguments
|
|
25
|
+
#
|
|
24
26
|
# rubocop:disable Lint/MissingSuper
|
|
25
27
|
def initialize(options = {})
|
|
26
28
|
@logger = options[:logger] || Datadog.logger
|
|
@@ -143,6 +145,9 @@ module Datadog
|
|
|
143
145
|
|
|
144
146
|
# Are there more traces to be processed next?
|
|
145
147
|
def work_pending?
|
|
148
|
+
# This is the same implementation as in Queue, but it was
|
|
149
|
+
# overwritten by IntervalLoop on its way to this worker class.
|
|
150
|
+
# See the comments in those two methods for more info.
|
|
146
151
|
!buffer.empty?
|
|
147
152
|
end
|
|
148
153
|
|
data/lib/datadog/version.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module VERSION
|
|
5
5
|
MAJOR = 2
|
|
6
|
-
MINOR =
|
|
6
|
+
MINOR = 25
|
|
7
7
|
PATCH = 0
|
|
8
8
|
PRE = nil
|
|
9
9
|
BUILD = nil
|
|
@@ -21,6 +21,6 @@ module Datadog
|
|
|
21
21
|
# To allow testing with the next unreleased version of Ruby, the version check is performed
|
|
22
22
|
# as `< #{MAXIMUM_RUBY_VERSION}`, meaning prereleases of MAXIMUM_RUBY_VERSION are allowed
|
|
23
23
|
# but not stable MAXIMUM_RUBY_VERSION releases.
|
|
24
|
-
MAXIMUM_RUBY_VERSION = '4.
|
|
24
|
+
MAXIMUM_RUBY_VERSION = '4.1'
|
|
25
25
|
end
|
|
26
26
|
end
|
data/lib/datadog.rb
CHANGED
|
@@ -6,6 +6,7 @@ require_relative 'datadog/tracing/contrib'
|
|
|
6
6
|
|
|
7
7
|
# Load other products (must follow tracing)
|
|
8
8
|
require_relative 'datadog/profiling'
|
|
9
|
+
require_relative 'datadog/ai_guard'
|
|
9
10
|
require_relative 'datadog/appsec'
|
|
10
11
|
require_relative 'datadog/di'
|
|
11
12
|
require_relative 'datadog/data_streams'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: datadog
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.25.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:
|
|
11
|
+
date: 2026-01-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -30,20 +30,20 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '3.
|
|
33
|
+
version: '3.5'
|
|
34
34
|
- - ">="
|
|
35
35
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 3.
|
|
36
|
+
version: 3.5.0
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
40
|
requirements:
|
|
41
41
|
- - "~>"
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '3.
|
|
43
|
+
version: '3.5'
|
|
44
44
|
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 3.
|
|
46
|
+
version: 3.5.0
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: libddwaf
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -139,6 +139,7 @@ files:
|
|
|
139
139
|
- ext/datadog_profiling_native_extension/collectors_stack.h
|
|
140
140
|
- ext/datadog_profiling_native_extension/collectors_thread_context.c
|
|
141
141
|
- ext/datadog_profiling_native_extension/collectors_thread_context.h
|
|
142
|
+
- ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c
|
|
142
143
|
- ext/datadog_profiling_native_extension/datadog_ruby_common.c
|
|
143
144
|
- ext/datadog_profiling_native_extension/datadog_ruby_common.h
|
|
144
145
|
- ext/datadog_profiling_native_extension/encoded_profile.c
|
|
@@ -181,6 +182,19 @@ files:
|
|
|
181
182
|
- ext/libdatadog_api/process_discovery.h
|
|
182
183
|
- ext/libdatadog_extconf_helpers.rb
|
|
183
184
|
- lib/datadog.rb
|
|
185
|
+
- lib/datadog/ai_guard.rb
|
|
186
|
+
- lib/datadog/ai_guard/api_client.rb
|
|
187
|
+
- lib/datadog/ai_guard/component.rb
|
|
188
|
+
- lib/datadog/ai_guard/configuration.rb
|
|
189
|
+
- lib/datadog/ai_guard/configuration/ext.rb
|
|
190
|
+
- lib/datadog/ai_guard/configuration/settings.rb
|
|
191
|
+
- lib/datadog/ai_guard/evaluation.rb
|
|
192
|
+
- lib/datadog/ai_guard/evaluation/message.rb
|
|
193
|
+
- lib/datadog/ai_guard/evaluation/no_op_result.rb
|
|
194
|
+
- lib/datadog/ai_guard/evaluation/request.rb
|
|
195
|
+
- lib/datadog/ai_guard/evaluation/result.rb
|
|
196
|
+
- lib/datadog/ai_guard/evaluation/tool_call.rb
|
|
197
|
+
- lib/datadog/ai_guard/ext.rb
|
|
184
198
|
- lib/datadog/appsec.rb
|
|
185
199
|
- lib/datadog/appsec/actions_handler.rb
|
|
186
200
|
- lib/datadog/appsec/actions_handler/serializable_backtrace.rb
|
|
@@ -374,7 +388,6 @@ files:
|
|
|
374
388
|
- lib/datadog/core/remote/tie/tracing.rb
|
|
375
389
|
- lib/datadog/core/remote/transport/config.rb
|
|
376
390
|
- lib/datadog/core/remote/transport/http.rb
|
|
377
|
-
- lib/datadog/core/remote/transport/http/api.rb
|
|
378
391
|
- lib/datadog/core/remote/transport/http/config.rb
|
|
379
392
|
- lib/datadog/core/remote/transport/http/negotiation.rb
|
|
380
393
|
- lib/datadog/core/remote/transport/negotiation.rb
|
|
@@ -409,7 +422,6 @@ files:
|
|
|
409
422
|
- lib/datadog/core/telemetry/metrics_manager.rb
|
|
410
423
|
- lib/datadog/core/telemetry/request.rb
|
|
411
424
|
- lib/datadog/core/telemetry/transport/http.rb
|
|
412
|
-
- lib/datadog/core/telemetry/transport/http/api.rb
|
|
413
425
|
- lib/datadog/core/telemetry/transport/http/telemetry.rb
|
|
414
426
|
- lib/datadog/core/telemetry/transport/telemetry.rb
|
|
415
427
|
- lib/datadog/core/telemetry/worker.rb
|
|
@@ -423,7 +435,6 @@ files:
|
|
|
423
435
|
- lib/datadog/core/transport/http/api/fallbacks.rb
|
|
424
436
|
- lib/datadog/core/transport/http/api/instance.rb
|
|
425
437
|
- lib/datadog/core/transport/http/api/map.rb
|
|
426
|
-
- lib/datadog/core/transport/http/api/spec.rb
|
|
427
438
|
- lib/datadog/core/transport/http/builder.rb
|
|
428
439
|
- lib/datadog/core/transport/http/client.rb
|
|
429
440
|
- lib/datadog/core/transport/http/env.rb
|
|
@@ -431,6 +442,7 @@ files:
|
|
|
431
442
|
- lib/datadog/core/transport/parcel.rb
|
|
432
443
|
- lib/datadog/core/transport/request.rb
|
|
433
444
|
- lib/datadog/core/transport/response.rb
|
|
445
|
+
- lib/datadog/core/transport/transport.rb
|
|
434
446
|
- lib/datadog/core/utils.rb
|
|
435
447
|
- lib/datadog/core/utils/array.rb
|
|
436
448
|
- lib/datadog/core/utils/at_fork_monkey_patch.rb
|
|
@@ -469,8 +481,6 @@ files:
|
|
|
469
481
|
- lib/datadog/data_streams/pathway_context.rb
|
|
470
482
|
- lib/datadog/data_streams/processor.rb
|
|
471
483
|
- lib/datadog/data_streams/transport/http.rb
|
|
472
|
-
- lib/datadog/data_streams/transport/http/api.rb
|
|
473
|
-
- lib/datadog/data_streams/transport/http/client.rb
|
|
474
484
|
- lib/datadog/data_streams/transport/http/stats.rb
|
|
475
485
|
- lib/datadog/data_streams/transport/stats.rb
|
|
476
486
|
- lib/datadog/di.rb
|
|
@@ -506,7 +516,6 @@ files:
|
|
|
506
516
|
- lib/datadog/di/serializer.rb
|
|
507
517
|
- lib/datadog/di/transport/diagnostics.rb
|
|
508
518
|
- lib/datadog/di/transport/http.rb
|
|
509
|
-
- lib/datadog/di/transport/http/api.rb
|
|
510
519
|
- lib/datadog/di/transport/http/diagnostics.rb
|
|
511
520
|
- lib/datadog/di/transport/http/input.rb
|
|
512
521
|
- lib/datadog/di/transport/input.rb
|
|
@@ -543,7 +552,6 @@ files:
|
|
|
543
552
|
- lib/datadog/open_feature/transport.rb
|
|
544
553
|
- lib/datadog/opentelemetry.rb
|
|
545
554
|
- lib/datadog/opentelemetry/api/baggage.rb
|
|
546
|
-
- lib/datadog/opentelemetry/api/baggage.rbs
|
|
547
555
|
- lib/datadog/opentelemetry/api/context.rb
|
|
548
556
|
- lib/datadog/opentelemetry/api/trace/span.rb
|
|
549
557
|
- lib/datadog/opentelemetry/configuration/settings.rb
|
|
@@ -1060,7 +1068,6 @@ files:
|
|
|
1060
1068
|
- lib/datadog/tracing/trace_segment.rb
|
|
1061
1069
|
- lib/datadog/tracing/tracer.rb
|
|
1062
1070
|
- lib/datadog/tracing/transport/http.rb
|
|
1063
|
-
- lib/datadog/tracing/transport/http/api.rb
|
|
1064
1071
|
- lib/datadog/tracing/transport/http/client.rb
|
|
1065
1072
|
- lib/datadog/tracing/transport/http/statistics.rb
|
|
1066
1073
|
- lib/datadog/tracing/transport/http/traces.rb
|
|
@@ -1083,8 +1090,8 @@ licenses:
|
|
|
1083
1090
|
- Apache-2.0
|
|
1084
1091
|
metadata:
|
|
1085
1092
|
allowed_push_host: https://rubygems.org
|
|
1086
|
-
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.
|
|
1087
|
-
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.
|
|
1093
|
+
changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.25.0/CHANGELOG.md
|
|
1094
|
+
source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.25.0
|
|
1088
1095
|
post_install_message:
|
|
1089
1096
|
rdoc_options: []
|
|
1090
1097
|
require_paths:
|
|
@@ -1096,7 +1103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1096
1103
|
version: 2.5.0
|
|
1097
1104
|
- - "<"
|
|
1098
1105
|
- !ruby/object:Gem::Version
|
|
1099
|
-
version: '4.
|
|
1106
|
+
version: '4.1'
|
|
1100
1107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1101
1108
|
requirements:
|
|
1102
1109
|
- - ">="
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../encoding'
|
|
4
|
-
require_relative '../../../transport/http/api/map'
|
|
5
|
-
require_relative '../../../transport/http/api/instance'
|
|
6
|
-
require_relative '../../../transport/http/api/spec'
|
|
7
|
-
require_relative 'negotiation'
|
|
8
|
-
require_relative 'config'
|
|
9
|
-
|
|
10
|
-
module Datadog
|
|
11
|
-
module Core
|
|
12
|
-
module Remote
|
|
13
|
-
module Transport
|
|
14
|
-
module HTTP
|
|
15
|
-
# Namespace for API components
|
|
16
|
-
module API
|
|
17
|
-
# Default API versions
|
|
18
|
-
ROOT = 'root'
|
|
19
|
-
V7 = 'v0.7'
|
|
20
|
-
|
|
21
|
-
module_function
|
|
22
|
-
|
|
23
|
-
def defaults
|
|
24
|
-
Core::Transport::HTTP::API::Map[
|
|
25
|
-
ROOT => Spec.new do |s|
|
|
26
|
-
s.info = Negotiation::API::Endpoint.new(
|
|
27
|
-
'/info',
|
|
28
|
-
)
|
|
29
|
-
end,
|
|
30
|
-
V7 => Spec.new do |s|
|
|
31
|
-
s.config = Config::API::Endpoint.new(
|
|
32
|
-
'/v0.7/config',
|
|
33
|
-
Core::Encoding::JSONEncoder,
|
|
34
|
-
)
|
|
35
|
-
end,
|
|
36
|
-
]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
class Instance < Core::Transport::HTTP::API::Instance
|
|
40
|
-
include Config::API::Instance
|
|
41
|
-
include Negotiation::API::Instance
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
class Spec < Core::Transport::HTTP::API::Spec
|
|
45
|
-
include Config::API::Spec
|
|
46
|
-
include Negotiation::API::Spec
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|