datadog 2.22.0 → 2.26.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 (245) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +140 -1
  3. data/ext/LIBDATADOG_DEVELOPMENT.md +1 -58
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +93 -23
  5. data/ext/datadog_profiling_native_extension/collectors_stack.c +21 -5
  6. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
  7. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
  8. data/ext/datadog_profiling_native_extension/extconf.rb +9 -4
  9. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  10. data/ext/datadog_profiling_native_extension/http_transport.c +1 -0
  11. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
  12. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
  13. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  14. data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
  15. data/ext/libdatadog_api/feature_flags.c +554 -0
  16. data/ext/libdatadog_api/feature_flags.h +5 -0
  17. data/ext/libdatadog_api/init.c +2 -0
  18. data/ext/libdatadog_api/library_config.c +12 -11
  19. data/ext/libdatadog_extconf_helpers.rb +1 -1
  20. data/lib/datadog/ai_guard/api_client.rb +82 -0
  21. data/lib/datadog/ai_guard/component.rb +42 -0
  22. data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
  23. data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
  24. data/lib/datadog/ai_guard/configuration.rb +11 -0
  25. data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
  26. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
  27. data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
  28. data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
  29. data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
  30. data/lib/datadog/ai_guard/evaluation.rb +72 -0
  31. data/lib/datadog/ai_guard/ext.rb +16 -0
  32. data/lib/datadog/ai_guard.rb +153 -0
  33. data/lib/datadog/appsec/api_security/route_extractor.rb +23 -6
  34. data/lib/datadog/appsec/api_security/sampler.rb +7 -4
  35. data/lib/datadog/appsec/assets/blocked.html +8 -0
  36. data/lib/datadog/appsec/assets/blocked.json +1 -1
  37. data/lib/datadog/appsec/assets/blocked.text +3 -1
  38. data/lib/datadog/appsec/assets.rb +1 -1
  39. data/lib/datadog/appsec/context.rb +2 -1
  40. data/lib/datadog/appsec/remote.rb +9 -12
  41. data/lib/datadog/appsec/response.rb +18 -4
  42. data/lib/datadog/appsec/security_engine/engine.rb +3 -3
  43. data/lib/datadog/appsec/security_engine/result.rb +2 -1
  44. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  45. data/lib/datadog/core/configuration/components.rb +37 -3
  46. data/lib/datadog/core/configuration/config_helper.rb +2 -2
  47. data/lib/datadog/core/configuration/deprecations.rb +2 -2
  48. data/lib/datadog/core/configuration/option_definition.rb +4 -2
  49. data/lib/datadog/core/configuration/options.rb +8 -5
  50. data/lib/datadog/core/configuration/settings.rb +28 -3
  51. data/lib/datadog/core/configuration/supported_configurations.rb +338 -302
  52. data/lib/datadog/core/ddsketch.rb +0 -2
  53. data/lib/datadog/core/environment/cgroup.rb +52 -25
  54. data/lib/datadog/core/environment/container.rb +140 -46
  55. data/lib/datadog/core/environment/ext.rb +7 -0
  56. data/lib/datadog/core/environment/process.rb +87 -0
  57. data/lib/datadog/core/error.rb +6 -6
  58. data/lib/datadog/core/feature_flags.rb +61 -0
  59. data/lib/datadog/core/pin.rb +4 -0
  60. data/lib/datadog/core/rate_limiter.rb +9 -1
  61. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  62. data/lib/datadog/core/remote/client.rb +14 -6
  63. data/lib/datadog/core/remote/component.rb +6 -4
  64. data/lib/datadog/core/remote/configuration/content.rb +15 -2
  65. data/lib/datadog/core/remote/configuration/digest.rb +14 -7
  66. data/lib/datadog/core/remote/configuration/repository.rb +1 -1
  67. data/lib/datadog/core/remote/configuration/target.rb +13 -6
  68. data/lib/datadog/core/remote/transport/config.rb +4 -25
  69. data/lib/datadog/core/remote/transport/http/config.rb +10 -50
  70. data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
  71. data/lib/datadog/core/remote/transport/http.rb +15 -24
  72. data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
  73. data/lib/datadog/core/remote/worker.rb +25 -37
  74. data/lib/datadog/core/runtime/metrics.rb +11 -1
  75. data/lib/datadog/core/semaphore.rb +1 -4
  76. data/lib/datadog/core/tag_builder.rb +0 -4
  77. data/lib/datadog/core/tag_normalizer.rb +84 -0
  78. data/lib/datadog/core/telemetry/component.rb +59 -16
  79. data/lib/datadog/core/telemetry/event/app_started.rb +88 -50
  80. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  81. data/lib/datadog/core/telemetry/logger.rb +2 -2
  82. data/lib/datadog/core/telemetry/logging.rb +2 -8
  83. data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
  84. data/lib/datadog/core/telemetry/request.rb +17 -3
  85. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +3 -34
  86. data/lib/datadog/core/telemetry/transport/http.rb +21 -16
  87. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -11
  88. data/lib/datadog/core/telemetry/worker.rb +88 -32
  89. data/lib/datadog/core/transport/ext.rb +2 -0
  90. data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
  91. data/lib/datadog/core/transport/http/api/instance.rb +4 -21
  92. data/lib/datadog/core/transport/http/builder.rb +9 -5
  93. data/lib/datadog/core/transport/http/client.rb +80 -0
  94. data/lib/datadog/core/transport/http.rb +22 -19
  95. data/lib/datadog/core/transport/response.rb +12 -1
  96. data/lib/datadog/core/transport/transport.rb +90 -0
  97. data/lib/datadog/core/utils/array.rb +29 -0
  98. data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
  99. data/lib/datadog/core/utils/network.rb +3 -1
  100. data/lib/datadog/core/utils/only_once_successful.rb +8 -2
  101. data/lib/datadog/core/utils/safe_dup.rb +2 -2
  102. data/lib/datadog/core/utils/sequence.rb +2 -0
  103. data/lib/datadog/core/utils/time.rb +1 -1
  104. data/lib/datadog/core/utils.rb +2 -0
  105. data/lib/datadog/core/workers/async.rb +10 -1
  106. data/lib/datadog/core/workers/interval_loop.rb +44 -3
  107. data/lib/datadog/core/workers/polling.rb +2 -0
  108. data/lib/datadog/core/workers/queue.rb +100 -1
  109. data/lib/datadog/data_streams/configuration/settings.rb +49 -0
  110. data/lib/datadog/data_streams/configuration.rb +11 -0
  111. data/lib/datadog/data_streams/ext.rb +11 -0
  112. data/lib/datadog/data_streams/extensions.rb +16 -0
  113. data/lib/datadog/data_streams/pathway_context.rb +169 -0
  114. data/lib/datadog/data_streams/processor.rb +509 -0
  115. data/lib/datadog/data_streams/transport/http/stats.rb +52 -0
  116. data/lib/datadog/data_streams/transport/http.rb +40 -0
  117. data/lib/datadog/data_streams/transport/stats.rb +46 -0
  118. data/lib/datadog/data_streams.rb +100 -0
  119. data/lib/datadog/di/boot.rb +4 -2
  120. data/lib/datadog/di/component.rb +0 -16
  121. data/lib/datadog/di/contrib/active_record.rb +30 -5
  122. data/lib/datadog/di/el/compiler.rb +8 -4
  123. data/lib/datadog/di/el/evaluator.rb +1 -1
  124. data/lib/datadog/di/error.rb +9 -0
  125. data/lib/datadog/di/instrumenter.rb +102 -37
  126. data/lib/datadog/di/logger.rb +2 -2
  127. data/lib/datadog/di/probe.rb +20 -0
  128. data/lib/datadog/di/probe_builder.rb +2 -1
  129. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  130. data/lib/datadog/di/probe_manager.rb +47 -33
  131. data/lib/datadog/di/probe_notification_builder.rb +77 -25
  132. data/lib/datadog/di/probe_notifier_worker.rb +5 -5
  133. data/lib/datadog/di/proc_responder.rb +32 -0
  134. data/lib/datadog/di/remote.rb +89 -84
  135. data/lib/datadog/di/transport/diagnostics.rb +8 -36
  136. data/lib/datadog/di/transport/http/diagnostics.rb +1 -33
  137. data/lib/datadog/di/transport/http/input.rb +1 -33
  138. data/lib/datadog/di/transport/http.rb +32 -17
  139. data/lib/datadog/di/transport/input.rb +67 -34
  140. data/lib/datadog/di.rb +61 -5
  141. data/lib/datadog/error_tracking/filters.rb +2 -2
  142. data/lib/datadog/kit/appsec/events/v2.rb +2 -3
  143. data/lib/datadog/open_feature/component.rb +60 -0
  144. data/lib/datadog/open_feature/configuration.rb +27 -0
  145. data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
  146. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  147. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  148. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  149. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  150. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  151. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  152. data/lib/datadog/open_feature/ext.rb +14 -0
  153. data/lib/datadog/open_feature/native_evaluator.rb +38 -0
  154. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  155. data/lib/datadog/open_feature/provider.rb +141 -0
  156. data/lib/datadog/open_feature/remote.rb +67 -0
  157. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  158. data/lib/datadog/open_feature/transport.rb +70 -0
  159. data/lib/datadog/open_feature.rb +19 -0
  160. data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
  161. data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
  162. data/lib/datadog/opentelemetry/metrics.rb +117 -0
  163. data/lib/datadog/opentelemetry/sdk/configurator.rb +25 -1
  164. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +35 -0
  165. data/lib/datadog/opentelemetry.rb +3 -0
  166. data/lib/datadog/profiling/collectors/code_provenance.rb +41 -7
  167. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -2
  168. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  169. data/lib/datadog/profiling/collectors/info.rb +5 -4
  170. data/lib/datadog/profiling/component.rb +12 -11
  171. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
  172. data/lib/datadog/profiling/http_transport.rb +4 -1
  173. data/lib/datadog/profiling/profiler.rb +4 -0
  174. data/lib/datadog/profiling/tag_builder.rb +36 -3
  175. data/lib/datadog/profiling.rb +1 -2
  176. data/lib/datadog/single_step_instrument.rb +1 -1
  177. data/lib/datadog/tracing/configuration/ext.rb +9 -0
  178. data/lib/datadog/tracing/configuration/settings.rb +74 -0
  179. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  180. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
  181. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
  182. data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
  183. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
  184. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
  185. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
  186. data/lib/datadog/tracing/contrib/extensions.rb +10 -2
  187. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
  188. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
  189. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +22 -17
  190. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
  191. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
  192. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
  193. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
  194. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
  195. data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
  196. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  197. data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
  198. data/lib/datadog/tracing/contrib/karafka/patcher.rb +35 -4
  199. data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
  200. data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
  201. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
  202. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
  203. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
  204. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
  205. data/lib/datadog/tracing/contrib/status_range_matcher.rb +9 -1
  206. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
  207. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  208. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  209. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  210. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  211. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  212. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
  213. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  214. data/lib/datadog/tracing/contrib/waterdrop.rb +41 -0
  215. data/lib/datadog/tracing/contrib.rb +1 -0
  216. data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
  217. data/lib/datadog/tracing/distributed/baggage.rb +3 -2
  218. data/lib/datadog/tracing/metadata/ext.rb +1 -1
  219. data/lib/datadog/tracing/remote.rb +1 -9
  220. data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
  221. data/lib/datadog/tracing/span.rb +1 -1
  222. data/lib/datadog/tracing/span_event.rb +2 -2
  223. data/lib/datadog/tracing/span_operation.rb +20 -9
  224. data/lib/datadog/tracing/trace_operation.rb +44 -6
  225. data/lib/datadog/tracing/tracer.rb +42 -16
  226. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  227. data/lib/datadog/tracing/transport/http/traces.rb +2 -50
  228. data/lib/datadog/tracing/transport/http.rb +15 -9
  229. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  230. data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
  231. data/lib/datadog/tracing/transport/traces.rb +9 -71
  232. data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
  233. data/lib/datadog/tracing/writer.rb +1 -0
  234. data/lib/datadog/version.rb +2 -2
  235. data/lib/datadog.rb +3 -0
  236. metadata +93 -23
  237. data/lib/datadog/core/remote/transport/http/api.rb +0 -53
  238. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  239. data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
  240. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  241. data/lib/datadog/core/transport/http/api/spec.rb +0 -36
  242. data/lib/datadog/di/transport/http/api.rb +0 -42
  243. data/lib/datadog/di/transport/http/client.rb +0 -47
  244. data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
  245. data/lib/datadog/tracing/transport/http/api.rb +0 -44
@@ -40,14 +40,16 @@ module Datadog
40
40
 
41
41
  def default_helpers(name)
42
42
  option_name = name.to_sym
43
- # @type var opt_getter: Configuration::OptionDefinition::helper_proc
44
- opt_getter = proc do
43
+ # Steep: https://github.com/soutaro/steep/issues/335
44
+ # @type var opt_getter: Configuration::OptionDefinition::generic_proc
45
+ opt_getter = proc do # steep:ignore IncompatibleAssignment
45
46
  # These Procs uses `get/set_option`, but we only add them to the OptionDefinition helpers here.
46
47
  # Steep is right that these methods are not defined, but we only run these Procs in instance context.
47
48
  get_option(option_name) # steep:ignore NoMethod
48
49
  end
49
- # @type var opt_setter: Configuration::OptionDefinition::helper_proc
50
- opt_setter = proc do |value|
50
+ # Steep: https://github.com/soutaro/steep/issues/335
51
+ # @type var opt_setter: Configuration::OptionDefinition::generic_proc
52
+ opt_setter = proc do |value| # steep:ignore IncompatibleAssignment
51
53
  set_option(option_name, value) # steep:ignore NoMethod
52
54
  end
53
55
  {
@@ -127,7 +129,8 @@ module Datadog
127
129
  end
128
130
  end
129
131
 
130
- InvalidOptionError = Class.new(StandardError)
132
+ # Steep: https://github.com/soutaro/steep/issues/1880
133
+ InvalidOptionError = Class.new(StandardError) # steep:ignore IncompatibleAssignment
131
134
  end
132
135
  end
133
136
  end
@@ -12,6 +12,7 @@ require_relative '../remote/ext'
12
12
  require_relative '../../profiling/ext'
13
13
 
14
14
  require_relative '../../tracing/configuration/settings'
15
+ require_relative '../../opentelemetry/configuration/settings'
15
16
 
16
17
  module Datadog
17
18
  module Core
@@ -169,6 +170,20 @@ module Datadog
169
170
  o.env Core::Environment::Ext::ENV_ENVIRONMENT
170
171
  end
171
172
 
173
+ # Configuration for container environments. For internal use only.
174
+ # @!visibility private
175
+ settings :container do
176
+ # Data supplied by the container runner to assist in uniquely identifying this process.
177
+ # Used in [Origin Detection](https://docs.datadoghq.com/developers/dogstatsd/unix_socket/?tab=host#origin-detection)
178
+ #
179
+ # @default `DD_EXTERNAL_ENV` environment variable, otherwise `nil`
180
+ # @return [String,nil]
181
+ option :external_env do |o|
182
+ o.type :string, nilable: true
183
+ o.env Core::Environment::Ext::ENV_EXTERNAL_ENV
184
+ end
185
+ end
186
+
172
187
  # Internal {Datadog::Statsd} metrics collection.
173
188
  #
174
189
  # @public_api
@@ -292,9 +307,6 @@ module Datadog
292
307
  # for Ruby versions 2.x, 3.1.4+, 3.2.3+ and 3.3.0+
293
308
  # (more details in {Datadog::Profiling::Component.enable_gc_profiling?})
294
309
  #
295
- # @warn Due to a VM bug in the Ractor implementation (https://bugs.ruby-lang.org/issues/19112) this feature
296
- # stops working when Ractors get garbage collected.
297
- #
298
310
  # @default `DD_PROFILING_GC_ENABLED` environment variable, otherwise `true`
299
311
  option :gc_enabled do |o|
300
312
  o.type :bool
@@ -828,6 +840,7 @@ module Datadog
828
840
 
829
841
  # Overrides agentless telemetry URL. To be used internally for testing purposes only.
830
842
  #
843
+ # @default `DD_TELEMETRY_AGENTLESS_URL` environment variable, otherwise `nil`.
831
844
  # @return [String]
832
845
  # @!visibility private
833
846
  option :agentless_url_override do |o|
@@ -1003,6 +1016,16 @@ module Datadog
1003
1016
  end
1004
1017
  end
1005
1018
 
1019
+ # Enable experimental process tags propagation such that payloads like spans contain the process tag.
1020
+ #
1021
+ # @default `DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED` environment variable, otherwise `false`
1022
+ # @return [Boolean]
1023
+ option :experimental_propagate_process_tags_enabled do |o|
1024
+ o.env 'DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED'
1025
+ o.default false
1026
+ o.type :bool
1027
+ end
1028
+
1006
1029
  # Tracer specific configuration starting with APM (e.g. DD_APM_TRACING_ENABLED).
1007
1030
  # @public_api
1008
1031
  settings :apm do
@@ -1030,6 +1053,8 @@ module Datadog
1030
1053
  # TODO: Tracing should manage its own settings.
1031
1054
  # Keep this extension here for now to keep things working.
1032
1055
  extend Datadog::Tracing::Configuration::Settings
1056
+
1057
+ extend Datadog::OpenTelemetry::Configuration::Settings
1033
1058
  end
1034
1059
  # standard:enable Metrics/BlockLength
1035
1060
  end