datadog 2.28.0 → 2.29.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.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -2
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +64 -3
  4. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +23 -4
  5. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -1
  6. data/ext/datadog_profiling_native_extension/extconf.rb +5 -0
  7. data/ext/datadog_profiling_native_extension/heap_recorder.c +183 -51
  8. data/ext/datadog_profiling_native_extension/heap_recorder.h +12 -1
  9. data/ext/datadog_profiling_native_extension/stack_recorder.c +34 -5
  10. data/ext/datadog_profiling_native_extension/stack_recorder.h +2 -1
  11. data/ext/libdatadog_api/crashtracker.c +5 -0
  12. data/ext/libdatadog_api/crashtracker_report_exception.c +236 -0
  13. data/lib/datadog/appsec/assets/blocked.html +2 -1
  14. data/lib/datadog/appsec/configuration/settings.rb +14 -0
  15. data/lib/datadog/appsec/context.rb +44 -9
  16. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +54 -5
  17. data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
  18. data/lib/datadog/appsec/contrib/faraday/patcher.rb +1 -1
  19. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +60 -7
  20. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +11 -6
  21. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  22. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -10
  23. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +1 -3
  24. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +2 -0
  25. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +72 -7
  26. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +2 -0
  27. data/lib/datadog/appsec/counter_sampler.rb +25 -0
  28. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +18 -0
  29. data/lib/datadog/appsec/security_engine/engine.rb +23 -2
  30. data/lib/datadog/appsec/utils/http/body.rb +38 -0
  31. data/lib/datadog/appsec/utils/http/media_range.rb +2 -1
  32. data/lib/datadog/appsec/utils/http/media_type.rb +28 -35
  33. data/lib/datadog/appsec/utils/http/url_encoded.rb +52 -0
  34. data/lib/datadog/core/configuration/components.rb +29 -4
  35. data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
  36. data/lib/datadog/core/configuration.rb +2 -2
  37. data/lib/datadog/core/crashtracking/component.rb +79 -19
  38. data/lib/datadog/core/environment/agent_info.rb +65 -1
  39. data/lib/datadog/core/logger.rb +1 -1
  40. data/lib/datadog/core/metrics/logging.rb +1 -1
  41. data/lib/datadog/core/process_discovery.rb +15 -19
  42. data/lib/datadog/core/rate_limiter.rb +2 -0
  43. data/lib/datadog/core/remote/component.rb +16 -5
  44. data/lib/datadog/core/remote/transport/config.rb +5 -11
  45. data/lib/datadog/core/telemetry/component.rb +0 -13
  46. data/lib/datadog/core/telemetry/transport/telemetry.rb +5 -6
  47. data/lib/datadog/core/transport/ext.rb +1 -0
  48. data/lib/datadog/core/transport/http/response.rb +4 -0
  49. data/lib/datadog/core/transport/parcel.rb +61 -9
  50. data/lib/datadog/core/utils/fnv.rb +26 -0
  51. data/lib/datadog/core.rb +6 -1
  52. data/lib/datadog/data_streams/processor.rb +34 -33
  53. data/lib/datadog/data_streams/transport/http/stats.rb +6 -0
  54. data/lib/datadog/data_streams/transport/http.rb +0 -4
  55. data/lib/datadog/data_streams/transport/stats.rb +5 -12
  56. data/lib/datadog/di/component.rb +1 -1
  57. data/lib/datadog/di/configuration/settings.rb +9 -0
  58. data/lib/datadog/di/context.rb +6 -0
  59. data/lib/datadog/di/instrumenter.rb +178 -133
  60. data/lib/datadog/di/probe.rb +10 -1
  61. data/lib/datadog/di/probe_file_loader.rb +2 -2
  62. data/lib/datadog/di/probe_manager.rb +7 -2
  63. data/lib/datadog/di/probe_notification_builder.rb +29 -8
  64. data/lib/datadog/di/probe_notifier_worker.rb +13 -3
  65. data/lib/datadog/di/proc_responder.rb +4 -0
  66. data/lib/datadog/di/remote.rb +2 -2
  67. data/lib/datadog/di/transport/diagnostics.rb +5 -7
  68. data/lib/datadog/di/transport/http/diagnostics.rb +3 -1
  69. data/lib/datadog/di/transport/http/input.rb +1 -1
  70. data/lib/datadog/di/transport/input.rb +5 -6
  71. data/lib/datadog/kit/tracing/method_tracer.rb +132 -0
  72. data/lib/datadog/open_feature/transport.rb +8 -11
  73. data/lib/datadog/profiling/component.rb +0 -6
  74. data/lib/datadog/tracing/contrib/http/integration.rb +0 -2
  75. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +6 -0
  76. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -1
  77. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +6 -0
  78. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +2 -1
  79. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +10 -0
  80. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +5 -1
  81. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +24 -0
  82. data/lib/datadog/tracing/contrib/rack/route_inference.rb +18 -6
  83. data/lib/datadog/tracing/contrib/registerable.rb +11 -0
  84. data/lib/datadog/tracing/contrib/sneakers/integration.rb +15 -4
  85. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +6 -0
  86. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -1
  87. data/lib/datadog/tracing/transport/io/client.rb +5 -8
  88. data/lib/datadog/tracing/transport/io/traces.rb +28 -34
  89. data/lib/datadog/tracing/transport/traces.rb +4 -10
  90. data/lib/datadog/version.rb +1 -1
  91. metadata +10 -5
  92. data/lib/datadog/appsec/contrib/rails/ext.rb +0 -13
@@ -13,13 +13,24 @@ module Datadog
13
13
  class Integration
14
14
  include Contrib::Integration
15
15
 
16
- MINIMUM_VERSION = Gem::Version.new('2.12.0')
16
+ MINIMUM_SNEAKERS_VERSION = Gem::Version.new('2.12.0')
17
+ # All versions are supported. Kicks first version is 3.0.0.
18
+ MINIMUM_KICKS_VERSION = Gem::Version.new('3.0.0')
17
19
 
18
20
  # @public_api Changing the integration name or integration options can cause breaking changes
19
21
  register_as :sneakers, auto_patch: true
20
-
22
+ register_alias_for :sneakers, as: :kicks
23
+
24
+ # Sneakers development continues in the Kicks gem.
25
+ # The **only** thing that has changed is the gem name,
26
+ # even the file naming and module namespacing are the same (require 'sneakers', `::Sneakers`).
27
+ #
28
+ # The last version of Sneakers is 2.12.0.
29
+ # The first version of Kicks is 3.0.0. We currently support all versions of Kicks.
30
+ #
31
+ # @see https://github.com/jondot/sneakers/commit/9780692624c666b6db8266d2d5710f709cb0f2e2
21
32
  def self.version
22
- Gem.loaded_specs['sneakers']&.version
33
+ Gem.loaded_specs['sneakers']&.version || Gem.loaded_specs['kicks']&.version
23
34
  end
24
35
 
25
36
  def self.loaded?
@@ -27,7 +38,7 @@ module Datadog
27
38
  end
28
39
 
29
40
  def self.compatible?
30
- super && version >= MINIMUM_VERSION
41
+ super && !!(version&.>= MINIMUM_SNEAKERS_VERSION)
31
42
  end
32
43
 
33
44
  def new_configuration
@@ -51,6 +51,12 @@ module Datadog
51
51
  o.default false
52
52
  end
53
53
 
54
+ option :inject_sql_basehash do |o|
55
+ o.type :bool
56
+ o.env Contrib::Propagation::SqlComment::Ext::ENV_DBM_INJECT_SQL_BASEHASH
57
+ o.default false
58
+ end
59
+
54
60
  option :peer_service do |o|
55
61
  o.type :string, nilable: true
56
62
  o.env Ext::ENV_PEER_SERVICE
@@ -57,7 +57,9 @@ module Datadog
57
57
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
58
58
 
59
59
  propagation_mode = Contrib::Propagation::SqlComment::Mode.new(
60
- comment_propagation, datadog_configuration[:append_comment]
60
+ comment_propagation,
61
+ datadog_configuration[:append_comment],
62
+ datadog_configuration[:inject_sql_basehash]
61
63
  )
62
64
 
63
65
  Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
@@ -19,8 +19,11 @@ module Datadog
19
19
  @out = out
20
20
  @encoder = encoder
21
21
 
22
+ # Note: The :encode option was previously supported but is no longer used.
23
+ # Data is now expected to be pre-encoded in the Parcel before reaching this client,
24
+ # matching the behavior of other transports (e.g., HTTP transport).
25
+ # If provided, the :encode option will be silently ignored for backwards compatibility.
22
26
  @request_block = options.fetch(:request, method(:send_default_request))
23
- @encode_block = options.fetch(:encode, method(:encode_data))
24
27
  @write_block = options.fetch(:write, method(:write_data))
25
28
  @response_block = options.fetch(:response, method(:build_response))
26
29
  end
@@ -38,7 +41,6 @@ module Datadog
38
41
  # Update statistics
39
42
  update_stats_from_response!(response)
40
43
 
41
- # Return response
42
44
  response
43
45
  rescue => e
44
46
  message =
@@ -59,10 +61,6 @@ module Datadog
59
61
  InternalErrorResponse.new(e)
60
62
  end
61
63
 
62
- def encode_data(encoder, request)
63
- request.parcel.encode_with(encoder)
64
- end
65
-
66
64
  def write_data(out, data)
67
65
  out.puts(data)
68
66
  end
@@ -74,8 +72,7 @@ module Datadog
74
72
  private
75
73
 
76
74
  def send_default_request(out, request)
77
- # Encode data
78
- data = @encode_block.call(encoder, request)
75
+ data = request.parcel.data
79
76
 
80
77
  # Write to IO
81
78
  result = @write_block.call(out, data)
@@ -21,29 +21,6 @@ module Datadog
21
21
  end
22
22
  end
23
23
 
24
- # Extensions for HTTP client
25
- module Client
26
- def send_traces(traces)
27
- # Build a request
28
- req = Transport::Traces::Request.new(Parcel.new(traces))
29
-
30
- [send_request(req) do |out, request|
31
- # Encode trace data
32
- data = encode_data(encoder, request)
33
-
34
- # Write to IO
35
- result = if block_given?
36
- yield(out, data)
37
- else
38
- write_data(out, data)
39
- end
40
-
41
- # Generate response
42
- Traces::Response.new(result)
43
- end]
44
- end
45
- end
46
-
47
24
  # Encoder for IO-specific trace encoding
48
25
  # API compliant when used with {JSONEncoder}.
49
26
  module Encoder
@@ -54,13 +31,13 @@ module Datadog
54
31
  ].freeze
55
32
 
56
33
  # Encodes a list of traces
57
- def encode_traces(encoder, traces)
34
+ def encode_traces(traces)
58
35
  trace_hashes = traces.map do |trace|
59
36
  encode_trace(trace)
60
37
  end
61
38
 
62
- # Wrap traces & encode them
63
- encoder.encode(traces: trace_hashes)
39
+ # Wrap traces
40
+ {traces: trace_hashes}
64
41
  end
65
42
 
66
43
  private
@@ -78,17 +55,34 @@ module Datadog
78
55
  end
79
56
  end
80
57
 
81
- # Transfer object for list of traces
82
- class Parcel
83
- include Datadog::Core::Transport::Parcel
58
+ # Extensions for HTTP client
59
+ module Client
84
60
  include Encoder
85
61
 
86
- def count
87
- data.length
88
- end
62
+ def send_traces(traces)
63
+ # Build a request
64
+ encoded_traces = encode_traces(traces)
65
+ encoder = Core::Encoding::JSONEncoder
66
+ parcel = Core::Transport::Parcel.new(
67
+ encoder.encode(encoded_traces),
68
+ content_type: encoder.content_type,
69
+ )
70
+ req = Transport::Traces::Request.new(parcel)
71
+
72
+ [send_request(req) do |out, request|
73
+ # Get already-encoded data from parcel
74
+ data = request.parcel.data
75
+
76
+ # Write to IO
77
+ result = if block_given?
78
+ yield(out, data)
79
+ else
80
+ write_data(out, data)
81
+ end
89
82
 
90
- def encode_with(encoder)
91
- encode_traces(encoder, data)
83
+ # Generate response
84
+ Traces::Response.new(result)
85
+ end]
92
86
  end
93
87
  end
94
88
 
@@ -14,19 +14,13 @@ module Datadog
14
14
  module Transport
15
15
  module Traces
16
16
  # Data transfer object for encoded traces
17
- class EncodedParcel
18
- include Datadog::Core::Transport::Parcel
19
-
17
+ class Parcel < Core::Transport::Parcel
20
18
  attr_reader :trace_count
21
19
 
22
- def initialize(data, trace_count)
23
- super(data)
20
+ def initialize(data, trace_count:, **opts)
21
+ super(data, **opts)
24
22
  @trace_count = trace_count
25
23
  end
26
-
27
- def count
28
- data.length
29
- end
30
24
  end
31
25
 
32
26
  # Traces request
@@ -135,7 +129,7 @@ module Datadog
135
129
  )
136
130
 
137
131
  responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count|
138
- request = Request.new(EncodedParcel.new(encoded_traces, trace_count))
132
+ request = Request.new(Parcel.new(encoded_traces, trace_count: trace_count))
139
133
 
140
134
  client.send_request(:traces, request).tap do |response|
141
135
  if downgrade?(response)
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 28
6
+ MINOR = 29
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
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.28.0
4
+ version: 2.29.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: 2026-02-04 00:00:00.000000000 Z
11
+ date: 2026-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -169,6 +169,7 @@ files:
169
169
  - ext/datadog_profiling_native_extension/unsafe_api_calls_check.h
170
170
  - ext/libdatadog_api/crashtracker.c
171
171
  - ext/libdatadog_api/crashtracker.h
172
+ - ext/libdatadog_api/crashtracker_report_exception.c
172
173
  - ext/libdatadog_api/datadog_ruby_common.c
173
174
  - ext/libdatadog_api/datadog_ruby_common.h
174
175
  - ext/libdatadog_api/ddsketch.c
@@ -260,7 +261,6 @@ files:
260
261
  - lib/datadog/appsec/contrib/rack/patcher.rb
261
262
  - lib/datadog/appsec/contrib/rack/request_body_middleware.rb
262
263
  - lib/datadog/appsec/contrib/rack/request_middleware.rb
263
- - lib/datadog/appsec/contrib/rails/ext.rb
264
264
  - lib/datadog/appsec/contrib/rails/framework.rb
265
265
  - lib/datadog/appsec/contrib/rails/gateway/request.rb
266
266
  - lib/datadog/appsec/contrib/rails/gateway/watcher.rb
@@ -281,6 +281,7 @@ files:
281
281
  - lib/datadog/appsec/contrib/sinatra/patcher.rb
282
282
  - lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb
283
283
  - lib/datadog/appsec/contrib/sinatra/request_middleware.rb
284
+ - lib/datadog/appsec/counter_sampler.rb
284
285
  - lib/datadog/appsec/event.rb
285
286
  - lib/datadog/appsec/ext.rb
286
287
  - lib/datadog/appsec/extensions.rb
@@ -310,8 +311,10 @@ files:
310
311
  - lib/datadog/appsec/utils.rb
311
312
  - lib/datadog/appsec/utils/hash_coercion.rb
312
313
  - lib/datadog/appsec/utils/http.rb
314
+ - lib/datadog/appsec/utils/http/body.rb
313
315
  - lib/datadog/appsec/utils/http/media_range.rb
314
316
  - lib/datadog/appsec/utils/http/media_type.rb
317
+ - lib/datadog/appsec/utils/http/url_encoded.rb
315
318
  - lib/datadog/auto_instrument.rb
316
319
  - lib/datadog/auto_instrument_base.rb
317
320
  - lib/datadog/core.rb
@@ -454,6 +457,7 @@ files:
454
457
  - lib/datadog/core/utils/at_fork_monkey_patch.rb
455
458
  - lib/datadog/core/utils/base64.rb
456
459
  - lib/datadog/core/utils/duration.rb
460
+ - lib/datadog/core/utils/fnv.rb
457
461
  - lib/datadog/core/utils/forking.rb
458
462
  - lib/datadog/core/utils/hash.rb
459
463
  - lib/datadog/core/utils/lru_cache.rb
@@ -539,6 +543,7 @@ files:
539
543
  - lib/datadog/kit/appsec/events/v2.rb
540
544
  - lib/datadog/kit/enable_core_dumps.rb
541
545
  - lib/datadog/kit/identity.rb
546
+ - lib/datadog/kit/tracing/method_tracer.rb
542
547
  - lib/datadog/open_feature.rb
543
548
  - lib/datadog/open_feature/component.rb
544
549
  - lib/datadog/open_feature/configuration.rb
@@ -1097,8 +1102,8 @@ licenses:
1097
1102
  - Apache-2.0
1098
1103
  metadata:
1099
1104
  allowed_push_host: https://rubygems.org
1100
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.28.0/CHANGELOG.md
1101
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.28.0
1105
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.29.0/CHANGELOG.md
1106
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.29.0
1102
1107
  post_install_message:
1103
1108
  rdoc_options: []
1104
1109
  require_paths:
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rails
7
- # Rails integration constants
8
- module Ext
9
- end
10
- end
11
- end
12
- end
13
- end