datadog 2.10.0 → 2.12.2

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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -1
  3. data/ext/datadog_profiling_native_extension/collectors_stack.c +3 -3
  4. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +44 -1
  5. data/ext/datadog_profiling_native_extension/extconf.rb +4 -0
  6. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.c +2 -0
  7. data/ext/datadog_profiling_native_extension/gvl_profiling_helper.h +0 -8
  8. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  9. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +64 -0
  10. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +7 -0
  11. data/ext/datadog_profiling_native_extension/profiling.c +7 -0
  12. data/ext/libdatadog_api/crashtracker.c +4 -4
  13. data/ext/libdatadog_extconf_helpers.rb +1 -1
  14. data/lib/datadog/appsec/configuration/settings.rb +64 -11
  15. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +23 -6
  16. data/lib/datadog/appsec/contrib/active_record/patcher.rb +63 -15
  17. data/lib/datadog/appsec/contrib/devise/configuration.rb +76 -0
  18. data/lib/datadog/appsec/contrib/devise/event.rb +4 -7
  19. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +16 -21
  20. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +8 -15
  21. data/lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb +1 -1
  22. data/lib/datadog/appsec/contrib/devise/patcher.rb +0 -3
  23. data/lib/datadog/appsec/contrib/devise/tracking.rb +1 -1
  24. data/lib/datadog/appsec/contrib/excon/integration.rb +41 -0
  25. data/lib/datadog/appsec/contrib/excon/patcher.rb +28 -0
  26. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +43 -0
  27. data/lib/datadog/appsec/contrib/faraday/connection_patch.rb +22 -0
  28. data/lib/datadog/appsec/contrib/faraday/integration.rb +42 -0
  29. data/lib/datadog/appsec/contrib/faraday/patcher.rb +53 -0
  30. data/lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb +22 -0
  31. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +42 -0
  32. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -12
  33. data/lib/datadog/appsec/contrib/graphql/patcher.rb +0 -3
  34. data/lib/datadog/appsec/contrib/rack/ext.rb +20 -0
  35. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +84 -72
  36. data/lib/datadog/appsec/contrib/rack/patcher.rb +0 -3
  37. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +3 -0
  38. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +20 -25
  39. data/lib/datadog/appsec/contrib/rails/patcher.rb +0 -3
  40. data/lib/datadog/appsec/contrib/rest_client/integration.rb +45 -0
  41. data/lib/datadog/appsec/contrib/rest_client/patcher.rb +28 -0
  42. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +39 -0
  43. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +38 -49
  44. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +0 -3
  45. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  46. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  47. data/lib/datadog/appsec/monitor/gateway/watcher.rb +19 -25
  48. data/lib/datadog/appsec/processor/rule_merger.rb +2 -1
  49. data/lib/datadog/appsec/remote.rb +11 -0
  50. data/lib/datadog/appsec.rb +3 -0
  51. data/lib/datadog/core/configuration/components.rb +17 -10
  52. data/lib/datadog/core/configuration/ext.rb +1 -1
  53. data/lib/datadog/core/configuration/option_definition.rb +2 -0
  54. data/lib/datadog/core/configuration/settings.rb +22 -6
  55. data/lib/datadog/core/encoding.rb +16 -0
  56. data/lib/datadog/core/environment/agent_info.rb +77 -0
  57. data/lib/datadog/core/metrics/client.rb +9 -8
  58. data/lib/datadog/core/remote/client.rb +5 -4
  59. data/lib/datadog/core/remote/component.rb +14 -12
  60. data/lib/datadog/core/remote/negotiation.rb +1 -1
  61. data/lib/datadog/core/remote/transport/http/api.rb +13 -18
  62. data/lib/datadog/core/remote/transport/http/config.rb +0 -18
  63. data/lib/datadog/core/remote/transport/http/negotiation.rb +1 -18
  64. data/lib/datadog/core/remote/transport/http.rb +6 -40
  65. data/lib/datadog/core/remote/transport/negotiation.rb +13 -1
  66. data/lib/datadog/core/remote/worker.rb +10 -7
  67. data/lib/datadog/core/telemetry/component.rb +5 -1
  68. data/lib/datadog/core/telemetry/event.rb +5 -0
  69. data/lib/datadog/core/telemetry/worker.rb +9 -5
  70. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
  71. data/lib/datadog/{tracing → core}/transport/http/api/instance.rb +1 -1
  72. data/lib/datadog/{tracing → core}/transport/http/api/spec.rb +1 -1
  73. data/lib/datadog/{tracing → core}/transport/http/builder.rb +37 -17
  74. data/lib/datadog/core/transport/http.rb +38 -0
  75. data/lib/datadog/core/transport/response.rb +4 -0
  76. data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
  77. data/lib/datadog/di/code_tracker.rb +15 -8
  78. data/lib/datadog/di/component.rb +2 -3
  79. data/lib/datadog/di/configuration/settings.rb +14 -0
  80. data/lib/datadog/di/contrib.rb +2 -0
  81. data/lib/datadog/di/logger.rb +30 -0
  82. data/lib/datadog/di/probe.rb +3 -6
  83. data/lib/datadog/di/probe_manager.rb +5 -2
  84. data/lib/datadog/di/probe_notifier_worker.rb +35 -8
  85. data/lib/datadog/di/remote.rb +3 -3
  86. data/lib/datadog/di/transport/diagnostics.rb +61 -0
  87. data/lib/datadog/di/transport/http/api.rb +52 -0
  88. data/lib/datadog/di/transport/http/client.rb +46 -0
  89. data/lib/datadog/di/transport/http/diagnostics.rb +92 -0
  90. data/lib/datadog/di/transport/http/input.rb +94 -0
  91. data/lib/datadog/di/transport/http.rb +105 -0
  92. data/lib/datadog/di/transport/input.rb +61 -0
  93. data/lib/datadog/di/utils.rb +91 -0
  94. data/lib/datadog/di.rb +5 -1
  95. data/lib/datadog/profiling/component.rb +2 -8
  96. data/lib/datadog/profiling/load_native_extension.rb +1 -33
  97. data/lib/datadog/tracing/component.rb +1 -0
  98. data/lib/datadog/tracing/configuration/ext.rb +1 -0
  99. data/lib/datadog/tracing/contrib/extensions.rb +14 -0
  100. data/lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb +21 -0
  101. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +11 -0
  102. data/lib/datadog/tracing/contrib/graphql/ext.rb +5 -0
  103. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +102 -11
  104. data/lib/datadog/tracing/contrib/rack/header_collection.rb +11 -1
  105. data/lib/datadog/tracing/contrib/rack/middlewares.rb +1 -1
  106. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +6 -1
  107. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  108. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  109. data/lib/datadog/tracing/metadata.rb +2 -0
  110. data/lib/datadog/tracing/span.rb +10 -1
  111. data/lib/datadog/tracing/span_operation.rb +6 -1
  112. data/lib/datadog/tracing/sync_writer.rb +9 -4
  113. data/lib/datadog/tracing/tracer.rb +15 -7
  114. data/lib/datadog/tracing/transport/http/api.rb +11 -2
  115. data/lib/datadog/tracing/transport/http/traces.rb +0 -3
  116. data/lib/datadog/tracing/transport/http.rb +7 -31
  117. data/lib/datadog/tracing/transport/serializable_trace.rb +11 -5
  118. data/lib/datadog/tracing/transport/traces.rb +25 -8
  119. data/lib/datadog/tracing/workers/trace_writer.rb +10 -3
  120. data/lib/datadog/tracing/workers.rb +5 -4
  121. data/lib/datadog/tracing/writer.rb +12 -4
  122. data/lib/datadog/version.rb +2 -2
  123. metadata +37 -29
  124. data/ext/datadog_profiling_loader/datadog_profiling_loader.c +0 -142
  125. data/ext/datadog_profiling_loader/extconf.rb +0 -60
  126. data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +0 -46
  127. data/lib/datadog/appsec/contrib/patcher.rb +0 -12
  128. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +0 -69
  129. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +0 -47
  130. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +0 -53
  131. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +0 -53
  132. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +0 -48
  133. data/lib/datadog/appsec/monitor/reactive/set_user.rb +0 -45
  134. data/lib/datadog/appsec/reactive/address_hash.rb +0 -22
  135. data/lib/datadog/appsec/reactive/engine.rb +0 -47
  136. data/lib/datadog/appsec/reactive/subscriber.rb +0 -19
  137. data/lib/datadog/core/remote/transport/http/api/instance.rb +0 -39
  138. data/lib/datadog/core/remote/transport/http/api/spec.rb +0 -21
  139. data/lib/datadog/core/remote/transport/http/builder.rb +0 -219
  140. data/lib/datadog/di/transport.rb +0 -79
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.10.0
4
+ version: 2.12.2
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-02-04 00:00:00.000000000 Z
11
+ date: 2025-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -44,28 +44,28 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.18.0.0.0
47
+ version: 1.18.0.0.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.18.0.0.0
54
+ version: 1.18.0.0.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: libdatadog
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 14.3.1.1.0
61
+ version: 16.0.1.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 14.3.1.1.0
68
+ version: 16.0.1.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: logger
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -90,7 +90,6 @@ executables:
90
90
  - ddprofrb
91
91
  extensions:
92
92
  - ext/datadog_profiling_native_extension/extconf.rb
93
- - ext/datadog_profiling_loader/extconf.rb
94
93
  - ext/libdatadog_api/extconf.rb
95
94
  extra_rdoc_files: []
96
95
  files:
@@ -102,8 +101,6 @@ files:
102
101
  - NOTICE
103
102
  - README.md
104
103
  - bin/ddprofrb
105
- - ext/datadog_profiling_loader/datadog_profiling_loader.c
106
- - ext/datadog_profiling_loader/extconf.rb
107
104
  - ext/datadog_profiling_native_extension/NativeExtensionDesign.md
108
105
  - ext/datadog_profiling_native_extension/clock_id.h
109
106
  - ext/datadog_profiling_native_extension/clock_id_from_pthread.c
@@ -173,6 +170,7 @@ files:
173
170
  - lib/datadog/appsec/contrib/active_record/integration.rb
174
171
  - lib/datadog/appsec/contrib/active_record/patcher.rb
175
172
  - lib/datadog/appsec/contrib/auto_instrument.rb
173
+ - lib/datadog/appsec/contrib/devise/configuration.rb
176
174
  - lib/datadog/appsec/contrib/devise/event.rb
177
175
  - lib/datadog/appsec/contrib/devise/ext.rb
178
176
  - lib/datadog/appsec/contrib/devise/integration.rb
@@ -182,23 +180,26 @@ files:
182
180
  - lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb
183
181
  - lib/datadog/appsec/contrib/devise/resource.rb
184
182
  - lib/datadog/appsec/contrib/devise/tracking.rb
183
+ - lib/datadog/appsec/contrib/excon/integration.rb
184
+ - lib/datadog/appsec/contrib/excon/patcher.rb
185
+ - lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb
186
+ - lib/datadog/appsec/contrib/faraday/connection_patch.rb
187
+ - lib/datadog/appsec/contrib/faraday/integration.rb
188
+ - lib/datadog/appsec/contrib/faraday/patcher.rb
189
+ - lib/datadog/appsec/contrib/faraday/rack_builder_patch.rb
190
+ - lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb
185
191
  - lib/datadog/appsec/contrib/graphql/appsec_trace.rb
186
192
  - lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb
187
193
  - lib/datadog/appsec/contrib/graphql/gateway/watcher.rb
188
194
  - lib/datadog/appsec/contrib/graphql/integration.rb
189
195
  - lib/datadog/appsec/contrib/graphql/patcher.rb
190
- - lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb
191
196
  - lib/datadog/appsec/contrib/integration.rb
192
- - lib/datadog/appsec/contrib/patcher.rb
193
197
  - lib/datadog/appsec/contrib/rack/ext.rb
194
198
  - lib/datadog/appsec/contrib/rack/gateway/request.rb
195
199
  - lib/datadog/appsec/contrib/rack/gateway/response.rb
196
200
  - lib/datadog/appsec/contrib/rack/gateway/watcher.rb
197
201
  - lib/datadog/appsec/contrib/rack/integration.rb
198
202
  - lib/datadog/appsec/contrib/rack/patcher.rb
199
- - lib/datadog/appsec/contrib/rack/reactive/request.rb
200
- - lib/datadog/appsec/contrib/rack/reactive/request_body.rb
201
- - lib/datadog/appsec/contrib/rack/reactive/response.rb
202
203
  - lib/datadog/appsec/contrib/rack/request_body_middleware.rb
203
204
  - lib/datadog/appsec/contrib/rack/request_middleware.rb
204
205
  - lib/datadog/appsec/contrib/rails/ext.rb
@@ -207,16 +208,17 @@ files:
207
208
  - lib/datadog/appsec/contrib/rails/gateway/watcher.rb
208
209
  - lib/datadog/appsec/contrib/rails/integration.rb
209
210
  - lib/datadog/appsec/contrib/rails/patcher.rb
210
- - lib/datadog/appsec/contrib/rails/reactive/action.rb
211
211
  - lib/datadog/appsec/contrib/rails/request.rb
212
212
  - lib/datadog/appsec/contrib/rails/request_middleware.rb
213
+ - lib/datadog/appsec/contrib/rest_client/integration.rb
214
+ - lib/datadog/appsec/contrib/rest_client/patcher.rb
215
+ - lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb
213
216
  - lib/datadog/appsec/contrib/sinatra/framework.rb
214
217
  - lib/datadog/appsec/contrib/sinatra/gateway/request.rb
215
218
  - lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb
216
219
  - lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb
217
220
  - lib/datadog/appsec/contrib/sinatra/integration.rb
218
221
  - lib/datadog/appsec/contrib/sinatra/patcher.rb
219
- - lib/datadog/appsec/contrib/sinatra/reactive/routed.rb
220
222
  - lib/datadog/appsec/contrib/sinatra/request_middleware.rb
221
223
  - lib/datadog/appsec/event.rb
222
224
  - lib/datadog/appsec/ext.rb
@@ -224,20 +226,17 @@ files:
224
226
  - lib/datadog/appsec/instrumentation.rb
225
227
  - lib/datadog/appsec/instrumentation/gateway.rb
226
228
  - lib/datadog/appsec/instrumentation/gateway/argument.rb
229
+ - lib/datadog/appsec/instrumentation/gateway/middleware.rb
227
230
  - lib/datadog/appsec/metrics.rb
228
231
  - lib/datadog/appsec/metrics/collector.rb
229
232
  - lib/datadog/appsec/metrics/exporter.rb
230
233
  - lib/datadog/appsec/metrics/telemetry.rb
231
234
  - lib/datadog/appsec/monitor.rb
232
235
  - lib/datadog/appsec/monitor/gateway/watcher.rb
233
- - lib/datadog/appsec/monitor/reactive/set_user.rb
234
236
  - lib/datadog/appsec/processor.rb
235
237
  - lib/datadog/appsec/processor/rule_loader.rb
236
238
  - lib/datadog/appsec/processor/rule_merger.rb
237
239
  - lib/datadog/appsec/rate_limiter.rb
238
- - lib/datadog/appsec/reactive/address_hash.rb
239
- - lib/datadog/appsec/reactive/engine.rb
240
- - lib/datadog/appsec/reactive/subscriber.rb
241
240
  - lib/datadog/appsec/remote.rb
242
241
  - lib/datadog/appsec/response.rb
243
242
  - lib/datadog/appsec/sample_rate.rb
@@ -272,6 +271,7 @@ files:
272
271
  - lib/datadog/core/diagnostics/environment_logger.rb
273
272
  - lib/datadog/core/diagnostics/health.rb
274
273
  - lib/datadog/core/encoding.rb
274
+ - lib/datadog/core/environment/agent_info.rb
275
275
  - lib/datadog/core/environment/cgroup.rb
276
276
  - lib/datadog/core/environment/class_count.rb
277
277
  - lib/datadog/core/environment/container.rb
@@ -318,9 +318,6 @@ files:
318
318
  - lib/datadog/core/remote/transport/config.rb
319
319
  - lib/datadog/core/remote/transport/http.rb
320
320
  - lib/datadog/core/remote/transport/http/api.rb
321
- - lib/datadog/core/remote/transport/http/api/instance.rb
322
- - lib/datadog/core/remote/transport/http/api/spec.rb
323
- - lib/datadog/core/remote/transport/http/builder.rb
324
321
  - lib/datadog/core/remote/transport/http/client.rb
325
322
  - lib/datadog/core/remote/transport/http/config.rb
326
323
  - lib/datadog/core/remote/transport/http/negotiation.rb
@@ -346,13 +343,17 @@ files:
346
343
  - lib/datadog/core/telemetry/request.rb
347
344
  - lib/datadog/core/telemetry/worker.rb
348
345
  - lib/datadog/core/transport/ext.rb
346
+ - lib/datadog/core/transport/http.rb
349
347
  - lib/datadog/core/transport/http/adapters/net.rb
350
348
  - lib/datadog/core/transport/http/adapters/registry.rb
351
349
  - lib/datadog/core/transport/http/adapters/test.rb
352
350
  - lib/datadog/core/transport/http/adapters/unix_socket.rb
353
351
  - lib/datadog/core/transport/http/api/endpoint.rb
354
352
  - lib/datadog/core/transport/http/api/fallbacks.rb
353
+ - lib/datadog/core/transport/http/api/instance.rb
355
354
  - lib/datadog/core/transport/http/api/map.rb
355
+ - lib/datadog/core/transport/http/api/spec.rb
356
+ - lib/datadog/core/transport/http/builder.rb
356
357
  - lib/datadog/core/transport/http/env.rb
357
358
  - lib/datadog/core/transport/http/response.rb
358
359
  - lib/datadog/core/transport/parcel.rb
@@ -397,6 +398,7 @@ files:
397
398
  - lib/datadog/di/error.rb
398
399
  - lib/datadog/di/extensions.rb
399
400
  - lib/datadog/di/instrumenter.rb
401
+ - lib/datadog/di/logger.rb
400
402
  - lib/datadog/di/preload.rb
401
403
  - lib/datadog/di/probe.rb
402
404
  - lib/datadog/di/probe_builder.rb
@@ -406,7 +408,13 @@ files:
406
408
  - lib/datadog/di/redactor.rb
407
409
  - lib/datadog/di/remote.rb
408
410
  - lib/datadog/di/serializer.rb
409
- - lib/datadog/di/transport.rb
411
+ - lib/datadog/di/transport/diagnostics.rb
412
+ - lib/datadog/di/transport/http.rb
413
+ - lib/datadog/di/transport/http/api.rb
414
+ - lib/datadog/di/transport/http/client.rb
415
+ - lib/datadog/di/transport/http/diagnostics.rb
416
+ - lib/datadog/di/transport/http/input.rb
417
+ - lib/datadog/di/transport/input.rb
410
418
  - lib/datadog/di/utils.rb
411
419
  - lib/datadog/kit.rb
412
420
  - lib/datadog/kit/appsec/events.rb
@@ -613,6 +621,7 @@ files:
613
621
  - lib/datadog/tracing/contrib/grape/instrumentation.rb
614
622
  - lib/datadog/tracing/contrib/grape/integration.rb
615
623
  - lib/datadog/tracing/contrib/grape/patcher.rb
624
+ - lib/datadog/tracing/contrib/graphql/configuration/error_extension_env_parser.rb
616
625
  - lib/datadog/tracing/contrib/graphql/configuration/settings.rb
617
626
  - lib/datadog/tracing/contrib/graphql/ext.rb
618
627
  - lib/datadog/tracing/contrib/graphql/integration.rb
@@ -868,6 +877,8 @@ files:
868
877
  - lib/datadog/tracing/metadata/analytics.rb
869
878
  - lib/datadog/tracing/metadata/errors.rb
870
879
  - lib/datadog/tracing/metadata/ext.rb
880
+ - lib/datadog/tracing/metadata/metastruct.rb
881
+ - lib/datadog/tracing/metadata/metastruct_tagging.rb
871
882
  - lib/datadog/tracing/metadata/tagging.rb
872
883
  - lib/datadog/tracing/pipeline.rb
873
884
  - lib/datadog/tracing/pipeline/span_filter.rb
@@ -900,9 +911,6 @@ files:
900
911
  - lib/datadog/tracing/tracer.rb
901
912
  - lib/datadog/tracing/transport/http.rb
902
913
  - lib/datadog/tracing/transport/http/api.rb
903
- - lib/datadog/tracing/transport/http/api/instance.rb
904
- - lib/datadog/tracing/transport/http/api/spec.rb
905
- - lib/datadog/tracing/transport/http/builder.rb
906
914
  - lib/datadog/tracing/transport/http/client.rb
907
915
  - lib/datadog/tracing/transport/http/statistics.rb
908
916
  - lib/datadog/tracing/transport/http/traces.rb
@@ -925,8 +933,8 @@ licenses:
925
933
  - Apache-2.0
926
934
  metadata:
927
935
  allowed_push_host: https://rubygems.org
928
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.10.0/CHANGELOG.md
929
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.10.0
936
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.12.2/CHANGELOG.md
937
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.12.2
930
938
  post_install_message:
931
939
  rdoc_options: []
932
940
  require_paths:
@@ -1,142 +0,0 @@
1
- #include <stdbool.h>
2
- #include <dlfcn.h>
3
- #include <ruby.h>
4
-
5
- // Why this exists:
6
- //
7
- // The Datadog::Profiling::Loader exists because when Ruby loads a native extension (using `require`), it uses
8
- // `dlopen(..., RTLD_LAZY | RTLD_GLOBAL)` (https://github.com/ruby/ruby/blob/67950a4c0a884bdb78d9beb4405ebf7459229b21/dln.c#L362).
9
- // This means that every symbol exposed directly or indirectly by that native extension becomes visible to every other
10
- // extension in the Ruby process. This can cause issues, see https://github.com/rubyjs/mini_racer/pull/179.
11
- //
12
- // Instead of `RTLD_LAZY | RTLD_GLOBAL`, we want to call `dlopen` with `RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND` when
13
- // loading the profiling native extension, to avoid leaking any unintended symbols (`RTLD_LOCAL`) and avoid picking
14
- // up other's symbols (`RTLD_DEEPBIND`).
15
- //
16
- // But Ruby's extension loading mechanism is not configurable -- there's no way to tell it to use different flags when
17
- // calling `dlopen`. To get around this, this file (datadog_profiling_loader.c) introduces another extension
18
- // (profiling loader) which has only a single responsibility: mimic Ruby's extension loading mechanism, but when calling
19
- // `dlopen` use a different set of flags.
20
- // This idea was shamelessly stolen from @lloeki's work in https://github.com/rubyjs/mini_racer/pull/179, big thanks!
21
- //
22
- // Extra note: Currently (May 2022), that we know of, the profiling native extension only exposes one potentially
23
- // problematic symbol: `rust_eh_personality` (coming from libdatadog).
24
- // Future versions of Rust have been patched not to expose this
25
- // (see https://github.com/rust-lang/rust/pull/95604#issuecomment-1108563434) so we may want to revisit the need
26
- // for this loader in the future, and perhaps delete it if we no longer require its services :)
27
-
28
- #ifndef RTLD_DEEPBIND
29
- #define RTLD_DEEPBIND 0
30
- #endif
31
-
32
- // Used to mark function arguments that are deliberately left unused
33
- #ifdef __GNUC__
34
- #define DDTRACE_UNUSED __attribute__((unused))
35
- #else
36
- #define DDTRACE_UNUSED
37
- #endif
38
-
39
- static VALUE ok_symbol = Qnil; // :ok in Ruby
40
- static VALUE error_symbol = Qnil; // :error in Ruby
41
-
42
- static VALUE _native_load(DDTRACE_UNUSED VALUE self, VALUE ruby_path, VALUE ruby_init_name);
43
- static bool failed_to_load(void *handle, VALUE *failure_details);
44
- static bool incompatible_library(void *handle, VALUE *failure_details);
45
- static bool failed_to_initialize(void *handle, char *init_name, VALUE *failure_details);
46
- static void set_failure_from_dlerror(VALUE *failure_details);
47
- static void unload_failed_library(void *handle);
48
-
49
- #define DDTRACE_EXPORT __attribute__ ((visibility ("default")))
50
-
51
- void DDTRACE_EXPORT Init_datadog_profiling_loader(void) {
52
- VALUE datadog_module = rb_define_module("Datadog");
53
- VALUE profiling_module = rb_define_module_under(datadog_module, "Profiling");
54
- VALUE loader_module = rb_define_module_under(profiling_module, "Loader");
55
- rb_define_singleton_method(loader_module, "_native_load", _native_load, 2);
56
-
57
- ok_symbol = ID2SYM(rb_intern_const("ok"));
58
- error_symbol = ID2SYM(rb_intern_const("error"));
59
- }
60
-
61
- static VALUE _native_load(DDTRACE_UNUSED VALUE self, VALUE ruby_path, VALUE ruby_init_name) {
62
- Check_Type(ruby_path, T_STRING);
63
- Check_Type(ruby_init_name, T_STRING);
64
-
65
- char *path = StringValueCStr(ruby_path);
66
- char *init_name = StringValueCStr(ruby_init_name);
67
-
68
- int dlopen_flags = RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND;
69
-
70
- #if defined(__has_feature)
71
- #if __has_feature(address_sanitizer)
72
- dlopen_flags &= ~RTLD_DEEPBIND; // Not supported by ASAN
73
- #endif
74
- #endif
75
-
76
- void *handle = dlopen(path, dlopen_flags);
77
-
78
- VALUE failure_details = Qnil;
79
-
80
- if (
81
- failed_to_load(handle, &failure_details) ||
82
- incompatible_library(handle, &failure_details) ||
83
- failed_to_initialize(handle, init_name, &failure_details)
84
- ) {
85
- return rb_ary_new_from_args(2, error_symbol, failure_details);
86
- }
87
-
88
- return rb_ary_new_from_args(2, ok_symbol, Qnil);
89
- }
90
-
91
- static bool failed_to_load(void *handle, VALUE *failure_details) {
92
- if (handle == NULL) {
93
- set_failure_from_dlerror(failure_details);
94
- return true;
95
- } else {
96
- return false;
97
- }
98
- }
99
-
100
- static bool incompatible_library(void *handle, VALUE *failure_details) {
101
- // The library being loaded may be linked to a different libruby than the current executing Ruby.
102
- // We check if this is the case by checking if a well-known symbol resolves to a common address.
103
-
104
- void *xmalloc_from_library = dlsym(handle, "ruby_xmalloc");
105
-
106
- if (xmalloc_from_library == NULL) {
107
- // This happens when ruby is built without a `libruby.so` by using `--disable-shared` at compilation time.
108
- // In this situation, no conflict between libruby version is possible.
109
- return false;
110
- }
111
-
112
- if (xmalloc_from_library != &ruby_xmalloc) {
113
- *failure_details = rb_str_new_cstr("library was compiled and linked to a different Ruby version");
114
- unload_failed_library(handle);
115
- return true;
116
- } else {
117
- return false;
118
- }
119
- }
120
-
121
- static bool failed_to_initialize(void *handle, char *init_name, VALUE *failure_details) {
122
- void (*initialization_function)(void) = dlsym(handle, init_name);
123
-
124
- if (initialization_function == NULL) {
125
- set_failure_from_dlerror(failure_details);
126
- unload_failed_library(handle);
127
- return true;
128
- } else {
129
- (*initialization_function)();
130
- return false;
131
- }
132
- }
133
-
134
- static void set_failure_from_dlerror(VALUE *failure_details) {
135
- char *failure = dlerror();
136
- *failure_details = failure == NULL ? Qnil : rb_str_new_cstr(failure);
137
- }
138
-
139
- static void unload_failed_library(void *handle) {
140
- // Note: According to the Ruby VM sources, this may fail with a segfault on really old versions of macOS (< 10.11)
141
- dlclose(handle);
142
- }
@@ -1,60 +0,0 @@
1
- # rubocop:disable Style/StderrPuts
2
-
3
- if RUBY_ENGINE != "ruby" || Gem.win_platform?
4
- $stderr.puts(
5
- "WARN: Skipping build of Datadog profiling loader. See Datadog profiling native extension note for details."
6
- )
7
-
8
- File.write("Makefile", "all install clean: # dummy makefile that does nothing")
9
- exit
10
- end
11
-
12
- require "mkmf"
13
-
14
- # Because we can't control what compiler versions our customers use, shipping with -Werror by default is a no-go.
15
- # But we can enable it in CI, so that we quickly spot any new warnings that just got introduced.
16
- append_cflags "-Werror" if ENV["DATADOG_GEM_CI"] == "true"
17
-
18
- # Older gcc releases may not default to C99 and we need to ask for this. This is also used:
19
- # * by upstream Ruby -- search for gnu99 in the codebase
20
- # * by msgpack, another datadog gem dependency
21
- # (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
22
- append_cflags "-std=gnu99"
23
-
24
- # Gets really noisy when we include the MJIT header, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
25
- append_cflags "-Wno-unused-function"
26
-
27
- # Allow defining variables at any point in a function
28
- append_cflags "-Wno-declaration-after-statement"
29
-
30
- # If we forget to include a Ruby header, the function call may still appear to work, but then
31
- # cause a segfault later. Let's ensure that never happens.
32
- append_cflags "-Werror-implicit-function-declaration"
33
-
34
- # Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
35
- append_cflags "-Wunused-parameter"
36
-
37
- # The native extension is not intended to expose any symbols/functions for other native libraries to use;
38
- # the sole exception being `Init_datadog_profiling_loader` which needs to be visible for Ruby to call it when
39
- # it `dlopen`s the library.
40
- #
41
- # By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
42
- # For more details see https://gcc.gnu.org/wiki/Visibility
43
- append_cflags "-fvisibility=hidden"
44
-
45
- # Avoid legacy C definitions
46
- append_cflags "-Wold-style-definition"
47
-
48
- # Enable all other compiler warnings
49
- append_cflags "-Wall"
50
- append_cflags "-Wextra"
51
-
52
- # Tag the native extension library with the Ruby version and Ruby platform.
53
- # This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
54
- # the wrong library is never loaded.
55
- # When requiring, we need to use the exact same string, including the version and the platform.
56
- EXTENSION_NAME = "datadog_profiling_loader.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
57
-
58
- create_makefile(EXTENSION_NAME)
59
-
60
- # rubocop:enable Style/StderrPuts
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module GraphQL
7
- module Reactive
8
- # Dispatch data from a GraphQL resolve query to the WAF context
9
- module Multiplex
10
- ADDRESSES = [
11
- 'graphql.server.all_resolvers'
12
- ].freeze
13
- private_constant :ADDRESSES
14
-
15
- def self.publish(engine, gateway_multiplex)
16
- catch(:block) do
17
- engine.publish('graphql.server.all_resolvers', gateway_multiplex.arguments)
18
-
19
- nil
20
- end
21
- end
22
-
23
- def self.subscribe(engine, context)
24
- engine.subscribe(*ADDRESSES) do |*values|
25
- Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
26
- arguments = values[0]
27
-
28
- persistent_data = {
29
- 'graphql.server.all_resolvers' => arguments
30
- }
31
-
32
- waf_timeout = Datadog.configuration.appsec.waf_timeout
33
- result = context.run_waf(persistent_data, {}, waf_timeout)
34
-
35
- next unless result.match?
36
-
37
- yield result
38
- throw(:block, true) unless result.actions.empty?
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- # Common patcher code for AppSec integrations
7
- # TODO: empty implementation, check with tracer shareable code
8
- module Patcher
9
- end
10
- end
11
- end
12
- end
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rack
7
- module Reactive
8
- # Dispatch data from a Rack request to the WAF context
9
- module Request
10
- ADDRESSES = [
11
- 'request.headers',
12
- 'request.uri.raw',
13
- 'request.query',
14
- 'request.cookies',
15
- 'request.client_ip',
16
- 'server.request.method'
17
- ].freeze
18
- private_constant :ADDRESSES
19
-
20
- def self.publish(engine, gateway_request)
21
- catch(:block) do
22
- engine.publish('request.query', gateway_request.query)
23
- engine.publish('request.headers', gateway_request.headers)
24
- engine.publish('request.uri.raw', gateway_request.fullpath)
25
- engine.publish('request.cookies', gateway_request.cookies)
26
- engine.publish('request.client_ip', gateway_request.client_ip)
27
- engine.publish('server.request.method', gateway_request.method)
28
-
29
- nil
30
- end
31
- end
32
-
33
- def self.subscribe(engine, context)
34
- engine.subscribe(*ADDRESSES) do |*values|
35
- Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
36
-
37
- headers = values[0]
38
- headers_no_cookies = headers.dup.tap { |h| h.delete('cookie') }
39
- uri_raw = values[1]
40
- query = values[2]
41
- cookies = values[3]
42
- client_ip = values[4]
43
- request_method = values[5]
44
-
45
- persistent_data = {
46
- 'server.request.cookies' => cookies,
47
- 'server.request.query' => query,
48
- 'server.request.uri.raw' => uri_raw,
49
- 'server.request.headers' => headers,
50
- 'server.request.headers.no_cookies' => headers_no_cookies,
51
- 'http.client_ip' => client_ip,
52
- 'server.request.method' => request_method,
53
- }
54
-
55
- waf_timeout = Datadog.configuration.appsec.waf_timeout
56
- result = context.run_waf(persistent_data, {}, waf_timeout)
57
-
58
- next unless result.match?
59
-
60
- yield result
61
- throw(:block, true) unless result.actions.empty?
62
- end
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rack
7
- module Reactive
8
- # Dispatch data from a Rack request to the WAF context
9
- module RequestBody
10
- ADDRESSES = [
11
- 'request.body',
12
- ].freeze
13
- private_constant :ADDRESSES
14
-
15
- def self.publish(engine, gateway_request)
16
- catch(:block) do
17
- # params have been parsed from the request body
18
- engine.publish('request.body', gateway_request.form_hash)
19
-
20
- nil
21
- end
22
- end
23
-
24
- def self.subscribe(engine, context)
25
- engine.subscribe(*ADDRESSES) do |*values|
26
- Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
27
- body = values[0]
28
-
29
- persistent_data = {
30
- 'server.request.body' => body,
31
- }
32
-
33
- waf_timeout = Datadog.configuration.appsec.waf_timeout
34
- result = context.run_waf(persistent_data, {}, waf_timeout)
35
-
36
- next unless result.match?
37
-
38
- yield result
39
- throw(:block, true) unless result.actions.empty?
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rack
7
- module Reactive
8
- # Dispatch data from a Rack response to the WAF context
9
- module Response
10
- ADDRESSES = [
11
- 'response.status',
12
- 'response.headers',
13
- ].freeze
14
- private_constant :ADDRESSES
15
-
16
- def self.publish(engine, gateway_response)
17
- catch(:block) do
18
- engine.publish('response.status', gateway_response.status)
19
- engine.publish('response.headers', gateway_response.headers)
20
-
21
- nil
22
- end
23
- end
24
-
25
- def self.subscribe(engine, context)
26
- engine.subscribe(*ADDRESSES) do |*values|
27
- Datadog.logger.debug { "reacted to #{ADDRESSES.inspect}: #{values.inspect}" }
28
-
29
- response_status = values[0]
30
- response_headers = values[1]
31
- response_headers_no_cookies = response_headers.dup.tap { |h| h.delete('set-cookie') }
32
-
33
- persistent_data = {
34
- 'server.response.status' => response_status.to_s,
35
- 'server.response.headers' => response_headers,
36
- 'server.response.headers.no_cookies' => response_headers_no_cookies,
37
- }
38
-
39
- waf_timeout = Datadog.configuration.appsec.waf_timeout
40
- result = context.run_waf(persistent_data, {}, waf_timeout)
41
-
42
- next unless result.match?
43
-
44
- yield result
45
- throw(:block, true) unless result.actions.empty?
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
53
- end