datadog 2.17.0 → 2.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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +12 -46
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +227 -49
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +19 -3
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +63 -12
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  8. data/ext/datadog_profiling_native_extension/extconf.rb +7 -0
  9. data/ext/datadog_profiling_native_extension/heap_recorder.c +239 -363
  10. data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
  11. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  12. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  13. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +1 -0
  14. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -3
  15. data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
  16. data/ext/datadog_profiling_native_extension/ruby_helpers.h +2 -10
  17. data/ext/datadog_profiling_native_extension/stack_recorder.c +154 -57
  18. data/ext/libdatadog_api/extconf.rb +2 -2
  19. data/ext/libdatadog_api/library_config.c +54 -12
  20. data/ext/libdatadog_api/library_config.h +6 -0
  21. data/ext/libdatadog_api/process_discovery.c +2 -7
  22. data/ext/libdatadog_extconf_helpers.rb +1 -1
  23. data/lib/datadog/appsec/api_security/lru_cache.rb +9 -2
  24. data/lib/datadog/appsec/api_security/route_extractor.rb +65 -0
  25. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  26. data/lib/datadog/appsec/api_security.rb +14 -0
  27. data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
  28. data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
  29. data/lib/datadog/appsec/component.rb +30 -54
  30. data/lib/datadog/appsec/configuration/settings.rb +60 -2
  31. data/lib/datadog/appsec/context.rb +6 -6
  32. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
  33. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +27 -16
  34. data/lib/datadog/appsec/processor/rule_loader.rb +5 -6
  35. data/lib/datadog/appsec/remote.rb +15 -55
  36. data/lib/datadog/appsec/security_engine/engine.rb +194 -0
  37. data/lib/datadog/appsec/security_engine/runner.rb +10 -11
  38. data/lib/datadog/appsec.rb +4 -7
  39. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  40. data/lib/datadog/core/configuration/agent_settings_resolver.rb +1 -43
  41. data/lib/datadog/core/configuration/components.rb +2 -4
  42. data/lib/datadog/core/configuration/option.rb +9 -9
  43. data/lib/datadog/core/configuration/settings.rb +22 -10
  44. data/lib/datadog/core/configuration/stable_config.rb +1 -2
  45. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  46. data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
  47. data/lib/datadog/core/process_discovery.rb +5 -1
  48. data/lib/datadog/core/remote/configuration/repository.rb +12 -0
  49. data/lib/datadog/core/tag_builder.rb +56 -0
  50. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +1 -0
  51. data/lib/datadog/core/telemetry/event/app_started.rb +129 -39
  52. data/lib/datadog/core/telemetry/logger.rb +5 -4
  53. data/lib/datadog/core/telemetry/logging.rb +11 -5
  54. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  55. data/lib/datadog/core/transport/http/builder.rb +2 -2
  56. data/lib/datadog/core/transport/http/env.rb +8 -0
  57. data/lib/datadog/core/utils.rb +7 -0
  58. data/lib/datadog/di/instrumenter.rb +52 -2
  59. data/lib/datadog/di/probe_notification_builder.rb +31 -41
  60. data/lib/datadog/di/probe_notifier_worker.rb +9 -1
  61. data/lib/datadog/di/serializer.rb +6 -2
  62. data/lib/datadog/di/transport/http/input.rb +10 -0
  63. data/lib/datadog/di/transport/input.rb +10 -2
  64. data/lib/datadog/profiling/collectors/code_provenance.rb +17 -8
  65. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -0
  66. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  67. data/lib/datadog/profiling/collectors/thread_context.rb +16 -1
  68. data/lib/datadog/profiling/component.rb +7 -9
  69. data/lib/datadog/profiling/ext.rb +0 -12
  70. data/lib/datadog/profiling/http_transport.rb +2 -2
  71. data/lib/datadog/profiling/profiler.rb +2 -0
  72. data/lib/datadog/profiling/scheduler.rb +2 -1
  73. data/lib/datadog/profiling/stack_recorder.rb +5 -5
  74. data/lib/datadog/profiling/tag_builder.rb +5 -37
  75. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  76. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
  77. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  78. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  79. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  80. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  81. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  82. data/lib/datadog/tracing/sync_writer.rb +1 -1
  83. data/lib/datadog/tracing/trace_operation.rb +12 -4
  84. data/lib/datadog/tracing/tracer.rb +6 -2
  85. data/lib/datadog/version.rb +1 -1
  86. metadata +12 -10
  87. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -321
  88. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -1023
  89. data/lib/datadog/appsec/processor/rule_merger.rb +0 -171
  90. data/lib/datadog/appsec/processor.rb +0 -107
@@ -273,7 +273,7 @@ module Datadog
273
273
  # Sample a span, tagging the trace as appropriate.
274
274
  def sample_trace(trace_op)
275
275
  begin
276
- @sampler.sample!(trace_op)
276
+ @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
277
277
  rescue StandardError => e
278
278
  SAMPLE_TRACE_LOG_ONLY_ONCE.run do
279
279
  logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
@@ -378,7 +378,12 @@ module Datadog
378
378
  event_span_op.service ||= @default_service
379
379
  end
380
380
 
381
+ events.trace_propagated.subscribe do |event_trace_op|
382
+ sample_trace(event_trace_op)
383
+ end
384
+
381
385
  events.span_finished.subscribe do |event_span, event_trace_op|
386
+ sample_trace(trace_op) if event_trace_op.sampling_priority.nil?
382
387
  sample_span(event_trace_op, event_span)
383
388
  flush_trace(event_trace_op)
384
389
  end
@@ -516,7 +521,6 @@ module Datadog
516
521
 
517
522
  # Flush finished spans from the trace buffer, send them to writer.
518
523
  def flush_trace(trace_op)
519
- sample_trace(trace_op) unless trace_op.sampling_priority
520
524
  begin
521
525
  trace = @trace_flush.consume!(trace_op)
522
526
  write(trace) if trace && !trace.empty?
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 17
6
+ MINOR = 18
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.17.0
4
+ version: 2.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: 2025-06-02 00:00:00.000000000 Z
11
+ date: 2025-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.22.0.0.2
53
+ version: 1.24.1.0.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 1.22.0.0.2
60
+ version: 1.24.1.0.0
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: libdatadog
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +170,14 @@ files:
170
170
  - lib/datadog/appsec/anonymizer.rb
171
171
  - lib/datadog/appsec/api_security.rb
172
172
  - lib/datadog/appsec/api_security/lru_cache.rb
173
+ - lib/datadog/appsec/api_security/route_extractor.rb
174
+ - lib/datadog/appsec/api_security/sampler.rb
173
175
  - lib/datadog/appsec/assets.rb
174
176
  - lib/datadog/appsec/assets/blocked.html
175
177
  - lib/datadog/appsec/assets/blocked.json
176
178
  - lib/datadog/appsec/assets/blocked.text
177
179
  - lib/datadog/appsec/assets/waf_rules/README.md
178
- - lib/datadog/appsec/assets/waf_rules/processors.json
179
180
  - lib/datadog/appsec/assets/waf_rules/recommended.json
180
- - lib/datadog/appsec/assets/waf_rules/scanners.json
181
181
  - lib/datadog/appsec/assets/waf_rules/strict.json
182
182
  - lib/datadog/appsec/autoload.rb
183
183
  - lib/datadog/appsec/component.rb
@@ -251,14 +251,13 @@ files:
251
251
  - lib/datadog/appsec/metrics/telemetry.rb
252
252
  - lib/datadog/appsec/monitor.rb
253
253
  - lib/datadog/appsec/monitor/gateway/watcher.rb
254
- - lib/datadog/appsec/processor.rb
255
254
  - lib/datadog/appsec/processor/rule_loader.rb
256
- - lib/datadog/appsec/processor/rule_merger.rb
257
255
  - lib/datadog/appsec/rate_limiter.rb
258
256
  - lib/datadog/appsec/remote.rb
259
257
  - lib/datadog/appsec/response.rb
260
258
  - lib/datadog/appsec/sample_rate.rb
261
259
  - lib/datadog/appsec/security_engine.rb
260
+ - lib/datadog/appsec/security_engine/engine.rb
262
261
  - lib/datadog/appsec/security_engine/result.rb
263
262
  - lib/datadog/appsec/security_engine/runner.rb
264
263
  - lib/datadog/appsec/security_event.rb
@@ -274,6 +273,7 @@ files:
274
273
  - lib/datadog/core/buffer/thread_safe.rb
275
274
  - lib/datadog/core/chunker.rb
276
275
  - lib/datadog/core/configuration.rb
276
+ - lib/datadog/core/configuration/agent_settings.rb
277
277
  - lib/datadog/core/configuration/agent_settings_resolver.rb
278
278
  - lib/datadog/core/configuration/agentless_settings_resolver.rb
279
279
  - lib/datadog/core/configuration/base.rb
@@ -321,6 +321,7 @@ files:
321
321
  - lib/datadog/core/metrics/options.rb
322
322
  - lib/datadog/core/pin.rb
323
323
  - lib/datadog/core/process_discovery.rb
324
+ - lib/datadog/core/process_discovery/tracer_memfd.rb
324
325
  - lib/datadog/core/rate_limiter.rb
325
326
  - lib/datadog/core/remote.rb
326
327
  - lib/datadog/core/remote/client.rb
@@ -348,6 +349,7 @@ files:
348
349
  - lib/datadog/core/runtime/ext.rb
349
350
  - lib/datadog/core/runtime/metrics.rb
350
351
  - lib/datadog/core/semaphore.rb
352
+ - lib/datadog/core/tag_builder.rb
351
353
  - lib/datadog/core/telemetry/component.rb
352
354
  - lib/datadog/core/telemetry/emitter.rb
353
355
  - lib/datadog/core/telemetry/event.rb
@@ -991,8 +993,8 @@ licenses:
991
993
  - Apache-2.0
992
994
  metadata:
993
995
  allowed_push_host: https://rubygems.org
994
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.17.0/CHANGELOG.md
995
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.17.0
996
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.18.0/CHANGELOG.md
997
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.18.0
996
998
  post_install_message:
997
999
  rdoc_options: []
998
1000
  require_paths:
@@ -1,321 +0,0 @@
1
- [
2
- {
3
- "id": "http-endpoint-fingerprint",
4
- "generator": "http_endpoint_fingerprint",
5
- "conditions": [
6
- {
7
- "operator": "exists",
8
- "parameters": {
9
- "inputs": [
10
- {
11
- "address": "waf.context.event"
12
- },
13
- {
14
- "address": "server.business_logic.users.login.failure"
15
- },
16
- {
17
- "address": "server.business_logic.users.login.success"
18
- }
19
- ]
20
- }
21
- }
22
- ],
23
- "parameters": {
24
- "mappings": [
25
- {
26
- "method": [
27
- {
28
- "address": "server.request.method"
29
- }
30
- ],
31
- "uri_raw": [
32
- {
33
- "address": "server.request.uri.raw"
34
- }
35
- ],
36
- "body": [
37
- {
38
- "address": "server.request.body"
39
- }
40
- ],
41
- "query": [
42
- {
43
- "address": "server.request.query"
44
- }
45
- ],
46
- "output": "_dd.appsec.fp.http.endpoint"
47
- }
48
- ]
49
- },
50
- "evaluate": false,
51
- "output": true
52
- },
53
- {
54
- "id": "extract-content",
55
- "generator": "extract_schema",
56
- "conditions": [
57
- {
58
- "operator": "equals",
59
- "parameters": {
60
- "inputs": [
61
- {
62
- "address": "waf.context.processor",
63
- "key_path": [
64
- "extract-schema"
65
- ]
66
- }
67
- ],
68
- "type": "boolean",
69
- "value": true
70
- }
71
- }
72
- ],
73
- "parameters": {
74
- "mappings": [
75
- {
76
- "inputs": [
77
- {
78
- "address": "server.request.body"
79
- }
80
- ],
81
- "output": "_dd.appsec.s.req.body"
82
- },
83
- {
84
- "inputs": [
85
- {
86
- "address": "server.request.cookies"
87
- }
88
- ],
89
- "output": "_dd.appsec.s.req.cookies"
90
- },
91
- {
92
- "inputs": [
93
- {
94
- "address": "server.request.query"
95
- }
96
- ],
97
- "output": "_dd.appsec.s.req.query"
98
- },
99
- {
100
- "inputs": [
101
- {
102
- "address": "server.request.path_params"
103
- }
104
- ],
105
- "output": "_dd.appsec.s.req.params"
106
- },
107
- {
108
- "inputs": [
109
- {
110
- "address": "server.response.body"
111
- }
112
- ],
113
- "output": "_dd.appsec.s.res.body"
114
- },
115
- {
116
- "inputs": [
117
- {
118
- "address": "graphql.server.all_resolvers"
119
- }
120
- ],
121
- "output": "_dd.appsec.s.graphql.all_resolvers"
122
- },
123
- {
124
- "inputs": [
125
- {
126
- "address": "graphql.server.resolver"
127
- }
128
- ],
129
- "output": "_dd.appsec.s.graphql.resolver"
130
- }
131
- ],
132
- "scanners": [
133
- {
134
- "tags": {
135
- "category": "payment"
136
- }
137
- },
138
- {
139
- "tags": {
140
- "category": "pii"
141
- }
142
- }
143
- ]
144
- },
145
- "evaluate": false,
146
- "output": true
147
- },
148
- {
149
- "id": "extract-headers",
150
- "generator": "extract_schema",
151
- "conditions": [
152
- {
153
- "operator": "equals",
154
- "parameters": {
155
- "inputs": [
156
- {
157
- "address": "waf.context.processor",
158
- "key_path": [
159
- "extract-schema"
160
- ]
161
- }
162
- ],
163
- "type": "boolean",
164
- "value": true
165
- }
166
- }
167
- ],
168
- "parameters": {
169
- "mappings": [
170
- {
171
- "inputs": [
172
- {
173
- "address": "server.request.headers.no_cookies"
174
- }
175
- ],
176
- "output": "_dd.appsec.s.req.headers"
177
- },
178
- {
179
- "inputs": [
180
- {
181
- "address": "server.response.headers.no_cookies"
182
- }
183
- ],
184
- "output": "_dd.appsec.s.res.headers"
185
- }
186
- ],
187
- "scanners": [
188
- {
189
- "tags": {
190
- "category": "credentials"
191
- }
192
- },
193
- {
194
- "tags": {
195
- "category": "pii"
196
- }
197
- }
198
- ]
199
- },
200
- "evaluate": false,
201
- "output": true
202
- },
203
- {
204
- "id": "http-header-fingerprint",
205
- "generator": "http_header_fingerprint",
206
- "conditions": [
207
- {
208
- "operator": "exists",
209
- "parameters": {
210
- "inputs": [
211
- {
212
- "address": "waf.context.event"
213
- },
214
- {
215
- "address": "server.business_logic.users.login.failure"
216
- },
217
- {
218
- "address": "server.business_logic.users.login.success"
219
- }
220
- ]
221
- }
222
- }
223
- ],
224
- "parameters": {
225
- "mappings": [
226
- {
227
- "headers": [
228
- {
229
- "address": "server.request.headers.no_cookies"
230
- }
231
- ],
232
- "output": "_dd.appsec.fp.http.header"
233
- }
234
- ]
235
- },
236
- "evaluate": false,
237
- "output": true
238
- },
239
- {
240
- "id": "http-network-fingerprint",
241
- "generator": "http_network_fingerprint",
242
- "conditions": [
243
- {
244
- "operator": "exists",
245
- "parameters": {
246
- "inputs": [
247
- {
248
- "address": "waf.context.event"
249
- },
250
- {
251
- "address": "server.business_logic.users.login.failure"
252
- },
253
- {
254
- "address": "server.business_logic.users.login.success"
255
- }
256
- ]
257
- }
258
- }
259
- ],
260
- "parameters": {
261
- "mappings": [
262
- {
263
- "headers": [
264
- {
265
- "address": "server.request.headers.no_cookies"
266
- }
267
- ],
268
- "output": "_dd.appsec.fp.http.network"
269
- }
270
- ]
271
- },
272
- "evaluate": false,
273
- "output": true
274
- },
275
- {
276
- "id": "session-fingerprint",
277
- "generator": "session_fingerprint",
278
- "conditions": [
279
- {
280
- "operator": "exists",
281
- "parameters": {
282
- "inputs": [
283
- {
284
- "address": "waf.context.event"
285
- },
286
- {
287
- "address": "server.business_logic.users.login.failure"
288
- },
289
- {
290
- "address": "server.business_logic.users.login.success"
291
- }
292
- ]
293
- }
294
- }
295
- ],
296
- "parameters": {
297
- "mappings": [
298
- {
299
- "cookies": [
300
- {
301
- "address": "server.request.cookies"
302
- }
303
- ],
304
- "session_id": [
305
- {
306
- "address": "usr.session_id"
307
- }
308
- ],
309
- "user_id": [
310
- {
311
- "address": "usr.id"
312
- }
313
- ],
314
- "output": "_dd.appsec.fp.session"
315
- }
316
- ]
317
- },
318
- "evaluate": false,
319
- "output": true
320
- }
321
- ]