datadog 2.20.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +212 -1
  3. data/README.md +0 -1
  4. data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +93 -23
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_stack.c +21 -5
  8. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +239 -0
  9. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
  10. data/ext/datadog_profiling_native_extension/extconf.rb +9 -4
  11. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  12. data/ext/datadog_profiling_native_extension/http_transport.c +1 -0
  13. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +12 -0
  14. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +4 -0
  15. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  16. data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
  17. data/ext/libdatadog_api/ddsketch.c +106 -0
  18. data/ext/libdatadog_api/feature_flags.c +554 -0
  19. data/ext/libdatadog_api/feature_flags.h +5 -0
  20. data/ext/libdatadog_api/init.c +5 -0
  21. data/ext/libdatadog_api/library_config.c +34 -25
  22. data/ext/libdatadog_api/process_discovery.c +24 -18
  23. data/ext/libdatadog_extconf_helpers.rb +1 -1
  24. data/lib/datadog/ai_guard/api_client.rb +82 -0
  25. data/lib/datadog/ai_guard/component.rb +42 -0
  26. data/lib/datadog/ai_guard/configuration/ext.rb +17 -0
  27. data/lib/datadog/ai_guard/configuration/settings.rb +98 -0
  28. data/lib/datadog/ai_guard/configuration.rb +11 -0
  29. data/lib/datadog/ai_guard/evaluation/message.rb +25 -0
  30. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +34 -0
  31. data/lib/datadog/ai_guard/evaluation/request.rb +81 -0
  32. data/lib/datadog/ai_guard/evaluation/result.rb +43 -0
  33. data/lib/datadog/ai_guard/evaluation/tool_call.rb +18 -0
  34. data/lib/datadog/ai_guard/evaluation.rb +72 -0
  35. data/lib/datadog/ai_guard/ext.rb +16 -0
  36. data/lib/datadog/ai_guard.rb +153 -0
  37. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  38. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  39. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  40. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  41. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  42. data/lib/datadog/appsec/api_security/route_extractor.rb +26 -5
  43. data/lib/datadog/appsec/api_security/sampler.rb +7 -4
  44. data/lib/datadog/appsec/assets/blocked.html +8 -0
  45. data/lib/datadog/appsec/assets/blocked.json +1 -1
  46. data/lib/datadog/appsec/assets/blocked.text +3 -1
  47. data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
  48. data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
  49. data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
  50. data/lib/datadog/appsec/assets.rb +1 -1
  51. data/lib/datadog/appsec/autoload.rb +1 -1
  52. data/lib/datadog/appsec/compressed_json.rb +1 -1
  53. data/lib/datadog/appsec/configuration/settings.rb +9 -0
  54. data/lib/datadog/appsec/context.rb +2 -1
  55. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
  56. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
  57. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
  58. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
  59. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
  60. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
  61. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
  62. data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
  63. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
  64. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
  65. data/lib/datadog/appsec/event.rb +12 -14
  66. data/lib/datadog/appsec/metrics/collector.rb +19 -3
  67. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
  68. data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
  69. data/lib/datadog/appsec/remote.rb +34 -25
  70. data/lib/datadog/appsec/response.rb +18 -4
  71. data/lib/datadog/appsec/security_engine/engine.rb +3 -3
  72. data/lib/datadog/appsec/security_engine/result.rb +29 -9
  73. data/lib/datadog/appsec/security_engine/runner.rb +19 -9
  74. data/lib/datadog/appsec/security_event.rb +5 -7
  75. data/lib/datadog/core/configuration/agent_settings_resolver.rb +4 -4
  76. data/lib/datadog/core/configuration/components.rb +59 -11
  77. data/lib/datadog/core/configuration/config_helper.rb +100 -0
  78. data/lib/datadog/core/configuration/deprecations.rb +36 -0
  79. data/lib/datadog/core/configuration/ext.rb +0 -1
  80. data/lib/datadog/core/configuration/option.rb +38 -43
  81. data/lib/datadog/core/configuration/option_definition.rb +4 -11
  82. data/lib/datadog/core/configuration/options.rb +9 -10
  83. data/lib/datadog/core/configuration/settings.rb +38 -9
  84. data/lib/datadog/core/configuration/stable_config.rb +10 -0
  85. data/lib/datadog/core/configuration/supported_configurations.rb +373 -0
  86. data/lib/datadog/core/configuration.rb +2 -2
  87. data/lib/datadog/core/ddsketch.rb +19 -0
  88. data/lib/datadog/core/deprecations.rb +2 -2
  89. data/lib/datadog/core/environment/cgroup.rb +52 -25
  90. data/lib/datadog/core/environment/container.rb +140 -46
  91. data/lib/datadog/core/environment/ext.rb +7 -2
  92. data/lib/datadog/core/environment/git.rb +2 -2
  93. data/lib/datadog/core/environment/process.rb +87 -0
  94. data/lib/datadog/core/environment/variable_helpers.rb +3 -3
  95. data/lib/datadog/core/environment/yjit.rb +2 -1
  96. data/lib/datadog/core/error.rb +6 -6
  97. data/lib/datadog/core/feature_flags.rb +61 -0
  98. data/lib/datadog/core/metrics/client.rb +2 -2
  99. data/lib/datadog/core/pin.rb +8 -8
  100. data/lib/datadog/core/process_discovery/tracer_memfd.rb +2 -4
  101. data/lib/datadog/core/process_discovery.rb +48 -23
  102. data/lib/datadog/core/rate_limiter.rb +9 -1
  103. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  104. data/lib/datadog/core/remote/client.rb +14 -6
  105. data/lib/datadog/core/remote/component.rb +10 -10
  106. data/lib/datadog/core/remote/configuration/content.rb +15 -2
  107. data/lib/datadog/core/remote/configuration/digest.rb +14 -7
  108. data/lib/datadog/core/remote/configuration/repository.rb +1 -1
  109. data/lib/datadog/core/remote/configuration/target.rb +13 -6
  110. data/lib/datadog/core/remote/transport/config.rb +4 -25
  111. data/lib/datadog/core/remote/transport/http/config.rb +10 -50
  112. data/lib/datadog/core/remote/transport/http/negotiation.rb +14 -44
  113. data/lib/datadog/core/remote/transport/http.rb +15 -24
  114. data/lib/datadog/core/remote/transport/negotiation.rb +8 -33
  115. data/lib/datadog/core/remote/worker.rb +25 -37
  116. data/lib/datadog/core/runtime/ext.rb +0 -1
  117. data/lib/datadog/core/runtime/metrics.rb +11 -1
  118. data/lib/datadog/core/semaphore.rb +1 -4
  119. data/lib/datadog/core/tag_builder.rb +0 -4
  120. data/lib/datadog/core/tag_normalizer.rb +84 -0
  121. data/lib/datadog/core/telemetry/component.rb +69 -15
  122. data/lib/datadog/core/telemetry/emitter.rb +6 -6
  123. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  124. data/lib/datadog/core/telemetry/event/app_started.rb +89 -51
  125. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
  126. data/lib/datadog/core/telemetry/event.rb +1 -0
  127. data/lib/datadog/core/telemetry/logger.rb +2 -2
  128. data/lib/datadog/core/telemetry/logging.rb +2 -8
  129. data/lib/datadog/core/telemetry/metrics_manager.rb +9 -0
  130. data/lib/datadog/core/telemetry/request.rb +17 -3
  131. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +3 -34
  132. data/lib/datadog/core/telemetry/transport/http.rb +21 -16
  133. data/lib/datadog/core/telemetry/transport/telemetry.rb +3 -11
  134. data/lib/datadog/core/telemetry/worker.rb +88 -32
  135. data/lib/datadog/core/transport/ext.rb +2 -0
  136. data/lib/datadog/core/transport/http/api/endpoint.rb +9 -4
  137. data/lib/datadog/core/transport/http/api/instance.rb +4 -21
  138. data/lib/datadog/core/transport/http/builder.rb +9 -5
  139. data/lib/datadog/core/transport/http/client.rb +80 -0
  140. data/lib/datadog/core/transport/http.rb +22 -19
  141. data/lib/datadog/core/transport/response.rb +15 -1
  142. data/lib/datadog/core/transport/transport.rb +90 -0
  143. data/lib/datadog/core/utils/array.rb +29 -0
  144. data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
  145. data/lib/datadog/core/utils/network.rb +22 -1
  146. data/lib/datadog/core/utils/only_once_successful.rb +8 -2
  147. data/lib/datadog/core/utils/safe_dup.rb +2 -2
  148. data/lib/datadog/core/utils/sequence.rb +2 -0
  149. data/lib/datadog/core/utils/time.rb +1 -1
  150. data/lib/datadog/core/utils.rb +2 -0
  151. data/lib/datadog/core/workers/async.rb +10 -1
  152. data/lib/datadog/core/workers/interval_loop.rb +44 -3
  153. data/lib/datadog/core/workers/polling.rb +2 -0
  154. data/lib/datadog/core/workers/queue.rb +100 -1
  155. data/lib/datadog/core.rb +2 -0
  156. data/lib/datadog/data_streams/configuration/settings.rb +49 -0
  157. data/lib/datadog/data_streams/configuration.rb +11 -0
  158. data/lib/datadog/data_streams/ext.rb +11 -0
  159. data/lib/datadog/data_streams/extensions.rb +16 -0
  160. data/lib/datadog/data_streams/pathway_context.rb +169 -0
  161. data/lib/datadog/data_streams/processor.rb +509 -0
  162. data/lib/datadog/data_streams/transport/http/stats.rb +52 -0
  163. data/lib/datadog/data_streams/transport/http.rb +40 -0
  164. data/lib/datadog/data_streams/transport/stats.rb +46 -0
  165. data/lib/datadog/data_streams.rb +100 -0
  166. data/lib/datadog/di/boot.rb +7 -3
  167. data/lib/datadog/di/component.rb +14 -16
  168. data/lib/datadog/di/context.rb +70 -0
  169. data/lib/datadog/di/contrib/active_record.rb +30 -5
  170. data/lib/datadog/di/el/compiler.rb +168 -0
  171. data/lib/datadog/di/el/evaluator.rb +159 -0
  172. data/lib/datadog/di/el/expression.rb +42 -0
  173. data/lib/datadog/di/el.rb +5 -0
  174. data/lib/datadog/di/error.rb +34 -0
  175. data/lib/datadog/di/instrumenter.rb +189 -55
  176. data/lib/datadog/di/logger.rb +2 -2
  177. data/lib/datadog/di/probe.rb +55 -15
  178. data/lib/datadog/di/probe_builder.rb +41 -2
  179. data/lib/datadog/di/probe_file_loader/railtie.rb +1 -1
  180. data/lib/datadog/di/probe_file_loader.rb +1 -1
  181. data/lib/datadog/di/probe_manager.rb +50 -35
  182. data/lib/datadog/di/probe_notification_builder.rb +121 -70
  183. data/lib/datadog/di/probe_notifier_worker.rb +5 -5
  184. data/lib/datadog/di/proc_responder.rb +32 -0
  185. data/lib/datadog/di/remote.rb +89 -84
  186. data/lib/datadog/di/serializer.rb +151 -7
  187. data/lib/datadog/di/transport/diagnostics.rb +8 -36
  188. data/lib/datadog/di/transport/http/diagnostics.rb +1 -33
  189. data/lib/datadog/di/transport/http/input.rb +1 -33
  190. data/lib/datadog/di/transport/http.rb +32 -17
  191. data/lib/datadog/di/transport/input.rb +67 -34
  192. data/lib/datadog/di.rb +61 -5
  193. data/lib/datadog/error_tracking/filters.rb +2 -2
  194. data/lib/datadog/kit/appsec/events/v2.rb +2 -3
  195. data/lib/datadog/open_feature/component.rb +60 -0
  196. data/lib/datadog/open_feature/configuration.rb +27 -0
  197. data/lib/datadog/open_feature/evaluation_engine.rb +70 -0
  198. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  199. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  200. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  201. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  202. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  203. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  204. data/lib/datadog/open_feature/ext.rb +14 -0
  205. data/lib/datadog/open_feature/native_evaluator.rb +38 -0
  206. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  207. data/lib/datadog/open_feature/provider.rb +141 -0
  208. data/lib/datadog/open_feature/remote.rb +67 -0
  209. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  210. data/lib/datadog/open_feature/transport.rb +70 -0
  211. data/lib/datadog/open_feature.rb +19 -0
  212. data/lib/datadog/opentelemetry/api/baggage.rb +1 -1
  213. data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
  214. data/lib/datadog/opentelemetry/metrics.rb +117 -0
  215. data/lib/datadog/opentelemetry/sdk/configurator.rb +26 -2
  216. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +35 -0
  217. data/lib/datadog/opentelemetry.rb +3 -0
  218. data/lib/datadog/profiling/collectors/code_provenance.rb +41 -7
  219. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +3 -2
  220. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  221. data/lib/datadog/profiling/collectors/info.rb +6 -5
  222. data/lib/datadog/profiling/component.rb +12 -11
  223. data/lib/datadog/profiling/ext/dir_monkey_patches.rb +18 -0
  224. data/lib/datadog/profiling/ext.rb +2 -1
  225. data/lib/datadog/profiling/http_transport.rb +5 -2
  226. data/lib/datadog/profiling/profiler.rb +4 -0
  227. data/lib/datadog/profiling/tag_builder.rb +36 -3
  228. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  229. data/lib/datadog/profiling.rb +1 -2
  230. data/lib/datadog/single_step_instrument.rb +1 -1
  231. data/lib/datadog/tracing/component.rb +6 -17
  232. data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
  233. data/lib/datadog/tracing/configuration/ext.rb +9 -3
  234. data/lib/datadog/tracing/configuration/settings.rb +89 -10
  235. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  236. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
  237. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
  238. data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
  239. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
  240. data/lib/datadog/tracing/contrib/component.rb +2 -2
  241. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
  242. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
  243. data/lib/datadog/tracing/contrib/extensions.rb +10 -2
  244. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
  245. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
  246. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  247. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  248. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -43
  249. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
  250. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
  251. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
  252. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
  253. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
  254. data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
  255. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  256. data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
  257. data/lib/datadog/tracing/contrib/karafka/patcher.rb +35 -4
  258. data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
  259. data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -0
  260. data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
  261. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
  262. data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
  263. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  264. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
  265. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
  266. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
  267. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
  268. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
  269. data/lib/datadog/tracing/contrib/status_range_matcher.rb +9 -1
  270. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +3 -1
  271. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  272. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  273. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  274. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  275. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  276. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +49 -0
  277. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  278. data/lib/datadog/tracing/contrib/waterdrop.rb +41 -0
  279. data/lib/datadog/tracing/contrib.rb +1 -0
  280. data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
  281. data/lib/datadog/tracing/distributed/baggage.rb +3 -2
  282. data/lib/datadog/tracing/metadata/ext.rb +9 -1
  283. data/lib/datadog/tracing/remote.rb +1 -9
  284. data/lib/datadog/tracing/sampling/priority_sampler.rb +3 -1
  285. data/lib/datadog/tracing/span.rb +1 -1
  286. data/lib/datadog/tracing/span_event.rb +2 -2
  287. data/lib/datadog/tracing/span_operation.rb +20 -9
  288. data/lib/datadog/tracing/trace_operation.rb +44 -6
  289. data/lib/datadog/tracing/tracer.rb +42 -16
  290. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  291. data/lib/datadog/tracing/transport/http/traces.rb +2 -50
  292. data/lib/datadog/tracing/transport/http.rb +15 -9
  293. data/lib/datadog/tracing/transport/io/client.rb +1 -1
  294. data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
  295. data/lib/datadog/tracing/transport/traces.rb +9 -71
  296. data/lib/datadog/tracing/workers/trace_writer.rb +5 -0
  297. data/lib/datadog/tracing/writer.rb +1 -0
  298. data/lib/datadog/version.rb +2 -2
  299. data/lib/datadog.rb +3 -0
  300. metadata +110 -24
  301. data/ext/libdatadog_api/macos_development.md +0 -26
  302. data/lib/datadog/core/remote/transport/http/api.rb +0 -53
  303. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  304. data/lib/datadog/core/telemetry/transport/http/api.rb +0 -43
  305. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  306. data/lib/datadog/core/transport/http/api/spec.rb +0 -36
  307. data/lib/datadog/di/transport/http/api.rb +0 -42
  308. data/lib/datadog/di/transport/http/client.rb +0 -47
  309. data/lib/datadog/opentelemetry/api/baggage.rbs +0 -26
  310. data/lib/datadog/tracing/transport/http/api.rb +0 -44
@@ -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
@@ -122,8 +123,8 @@ module Datadog
122
123
  # @default `DD_TRACE_DEBUG` environment variable, otherwise `false`
123
124
  # @return [Boolean]
124
125
  option :debug do |o|
125
- o.env [Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED,
126
- Datadog::Core::Configuration::Ext::Diagnostics::ENV_OTEL_LOG_LEVEL]
126
+ # Note: Alias (OTEL_LOG_LEVEL) defined in supported-configurations.json
127
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED
127
128
  o.default false
128
129
  o.type :bool
129
130
  o.env_parser do |value|
@@ -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
@@ -212,6 +227,7 @@ module Datadog
212
227
  # Log level for `Datadog.logger`.
213
228
  # @see Logger::Severity
214
229
  # @return Logger::Severity
230
+ # TODO: Add environment variable for this `DD_TRACE_LOG_LEVEL`
215
231
  option :level, default: ::Logger::INFO
216
232
  end
217
233
 
@@ -291,9 +307,6 @@ module Datadog
291
307
  # for Ruby versions 2.x, 3.1.4+, 3.2.3+ and 3.3.0+
292
308
  # (more details in {Datadog::Profiling::Component.enable_gc_profiling?})
293
309
  #
294
- # @warn Due to a VM bug in the Ractor implementation (https://bugs.ruby-lang.org/issues/19112) this feature
295
- # stops working when Ractors get garbage collected.
296
- #
297
310
  # @default `DD_PROFILING_GC_ENABLED` environment variable, otherwise `true`
298
311
  option :gc_enabled do |o|
299
312
  o.type :bool
@@ -485,7 +498,7 @@ module Datadog
485
498
  # @default `DD_PROFILING_GVL_ENABLED` environment variable as a boolean, otherwise `true`
486
499
  option :gvl_enabled do |o|
487
500
  o.type :bool
488
- o.deprecated_env 'DD_PROFILING_PREVIEW_GVL_ENABLED'
501
+ # Note: Deprecated alias (DD_PROFILING_PREVIEW_GVL_ENABLED) defined in supported-configurations.json
489
502
  o.env 'DD_PROFILING_GVL_ENABLED'
490
503
  o.default true
491
504
  end
@@ -604,7 +617,8 @@ module Datadog
604
617
 
605
618
  option :experimental_runtime_id_enabled do |o|
606
619
  o.type :bool
607
- o.env ['DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED', 'DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED']
620
+ # Note: Alias (DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED) defined in supported-configurations.json
621
+ o.env 'DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED'
608
622
  o.default false
609
623
  end
610
624
 
@@ -620,7 +634,8 @@ module Datadog
620
634
  o.type :string, nilable: true
621
635
 
622
636
  # NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
623
- o.env [Core::Environment::Ext::ENV_SERVICE, Core::Environment::Ext::ENV_OTEL_SERVICE]
637
+ # Note: Alias (OTEL_SERVICE_NAME) defined in supported-configurations.json
638
+ o.env Core::Environment::Ext::ENV_SERVICE
624
639
  o.default Core::Environment::Ext::FALLBACK_SERVICE_NAME
625
640
 
626
641
  # There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
@@ -655,7 +670,8 @@ module Datadog
655
670
  # @return [Hash<String,String>]
656
671
  option :tags do |o|
657
672
  o.type :hash, nilable: true
658
- o.env [Core::Environment::Ext::ENV_TAGS, Core::Environment::Ext::ENV_OTEL_RESOURCE_ATTRIBUTES]
673
+ # Note: Alias (OTEL_RESOURCE_ATTRIBUTES) defined in supported-configurations.json
674
+ o.env Core::Environment::Ext::ENV_TAGS
659
675
  o.env_parser do |env_value|
660
676
  # Parses a string containing key-value pairs and returns a hash.
661
677
  # Key-value pairs are delimited by ':' OR `=`, and pairs are separated by whitespace, comma, OR BOTH.
@@ -824,6 +840,7 @@ module Datadog
824
840
 
825
841
  # Overrides agentless telemetry URL. To be used internally for testing purposes only.
826
842
  #
843
+ # @default `DD_TELEMETRY_AGENTLESS_URL` environment variable, otherwise `nil`.
827
844
  # @return [String]
828
845
  # @!visibility private
829
846
  option :agentless_url_override do |o|
@@ -999,6 +1016,16 @@ module Datadog
999
1016
  end
1000
1017
  end
1001
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
+
1002
1029
  # Tracer specific configuration starting with APM (e.g. DD_APM_TRACING_ENABLED).
1003
1030
  # @public_api
1004
1031
  settings :apm do
@@ -1026,6 +1053,8 @@ module Datadog
1026
1053
  # TODO: Tracing should manage its own settings.
1027
1054
  # Keep this extension here for now to keep things working.
1028
1055
  extend Datadog::Tracing::Configuration::Settings
1056
+
1057
+ extend Datadog::OpenTelemetry::Configuration::Settings
1029
1058
  end
1030
1059
  # standard:enable Metrics/BlockLength
1031
1060
  end
@@ -1,10 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../utils/only_once'
4
+
3
5
  module Datadog
4
6
  module Core
5
7
  module Configuration
6
8
  # Import config from config files (fleet automation)
7
9
  module StableConfig
10
+ LOG_ONLY_ONCE = Utils::OnlyOnce.new
11
+
8
12
  def self.extract_configuration
9
13
  if (libdatadog_api_failure = Datadog::Core::LIBDATADOG_API_FAILURE)
10
14
  Datadog.config_init_logger.debug("Cannot enable stable config: #{libdatadog_api_failure}")
@@ -16,6 +20,12 @@ module Datadog
16
20
  def self.configuration
17
21
  @configuration ||= StableConfig.extract_configuration
18
22
  end
23
+
24
+ def self.log_result(logger)
25
+ LOG_ONLY_ONCE.run do
26
+ logger.debug(configuration[:logs]) if configuration[:logs]
27
+ end
28
+ end
19
29
  end
20
30
  end
21
31
  end
@@ -0,0 +1,373 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ # This file is auto-generated from `supported-configurations.json` by `rake local_config_map:generate`.
6
+ # Do not change manually! Please refer to `docs/AccessEnvironmentVariables.md` for more information.
7
+
8
+ module Datadog
9
+ module Core
10
+ module Configuration
11
+ SUPPORTED_CONFIGURATION_NAMES =
12
+ Set["DD_AGENT_HOST",
13
+ "DD_AI_GUARD_ENABLED",
14
+ "DD_AI_GUARD_ENDPOINT",
15
+ "DD_AI_GUARD_MAX_CONTENT_SIZE",
16
+ "DD_AI_GUARD_MAX_MESSAGES_LENGTH",
17
+ "DD_AI_GUARD_TIMEOUT",
18
+ "DD_API_KEY",
19
+ "DD_API_SECURITY_ENABLED",
20
+ "DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED",
21
+ "DD_API_SECURITY_REQUEST_SAMPLE_RATE",
22
+ "DD_API_SECURITY_SAMPLE_DELAY",
23
+ "DD_APM_TRACING_ENABLED",
24
+ "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING",
25
+ "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE",
26
+ "DD_APPSEC_ENABLED",
27
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_HTML",
28
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_JSON",
29
+ "DD_APPSEC_HTTP_BLOCKED_TEMPLATE_TEXT",
30
+ "DD_APPSEC_MAX_STACK_TRACES",
31
+ "DD_APPSEC_MAX_STACK_TRACE_DEPTH",
32
+ "DD_APPSEC_MAX_STACK_TRACE_DEPTH_TOP_PERCENT",
33
+ "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP",
34
+ "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP",
35
+ "DD_APPSEC_RASP_ENABLED",
36
+ "DD_APPSEC_RULES",
37
+ "DD_APPSEC_SCA_ENABLED",
38
+ "DD_APPSEC_STACK_TRACE_ENABLED",
39
+ "DD_APPSEC_TRACE_RATE_LIMIT",
40
+ "DD_APPSEC_WAF_DEBUG",
41
+ "DD_APPSEC_WAF_TIMEOUT",
42
+ "DD_APP_KEY",
43
+ "DD_CRASHTRACKING_ENABLED",
44
+ "DD_DATA_STREAMS_ENABLED",
45
+ "DD_DBM_PROPAGATION_MODE",
46
+ "DD_DISABLE_DATADOG_RAILS",
47
+ "DD_DYNAMIC_INSTRUMENTATION_ENABLED",
48
+ "DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE",
49
+ "DD_DYNAMIC_INSTRUMENTATION_REDACTED_IDENTIFIERS",
50
+ "DD_DYNAMIC_INSTRUMENTATION_REDACTED_TYPES",
51
+ "DD_ENV",
52
+ "DD_ERROR_TRACKING_HANDLED_ERRORS",
53
+ "DD_ERROR_TRACKING_HANDLED_ERRORS_INCLUDE",
54
+ "DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED",
55
+ "DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED",
56
+ "DD_EXTERNAL_ENV",
57
+ "DD_GIT_COMMIT_SHA",
58
+ "DD_GIT_REPOSITORY_URL",
59
+ "DD_HEALTH_METRICS_ENABLED",
60
+ "DD_INJECTION_ENABLED",
61
+ "DD_INJECT_FORCE",
62
+ "DD_INSTRUMENTATION_INSTALL_ID",
63
+ "DD_INSTRUMENTATION_INSTALL_TIME",
64
+ "DD_INSTRUMENTATION_INSTALL_TYPE",
65
+ "DD_INSTRUMENTATION_TELEMETRY_ENABLED",
66
+ "DD_LOGS_INJECTION",
67
+ "DD_METRICS_OTEL_ENABLED",
68
+ "DD_METRIC_AGENT_PORT",
69
+ "DD_PROFILING_ALLOCATION_ENABLED",
70
+ "DD_PROFILING_DIR_INTERRUPTION_WORKAROUND_ENABLED",
71
+ "DD_PROFILING_ENABLED",
72
+ "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED",
73
+ "DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED",
74
+ "DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE",
75
+ "DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED",
76
+ "DD_PROFILING_GC_ENABLED",
77
+ "DD_PROFILING_GVL_ENABLED",
78
+ "DD_PROFILING_HEAP_CLEAN_AFTER_GC_ENABLED",
79
+ "DD_PROFILING_MAX_FRAMES",
80
+ "DD_PROFILING_NATIVE_FILENAMES_ENABLED",
81
+ "DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED",
82
+ "DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE",
83
+ "DD_PROFILING_PREVIEW_OTEL_CONTEXT_ENABLED",
84
+ "DD_PROFILING_SIGHANDLER_SAMPLING_ENABLED",
85
+ "DD_PROFILING_SKIP_MYSQL2_CHECK",
86
+ "DD_PROFILING_TIMELINE_ENABLED",
87
+ "DD_PROFILING_UPLOAD_PERIOD",
88
+ "DD_PROFILING_UPLOAD_TIMEOUT",
89
+ "DD_REDIS_COMMAND_ARGS",
90
+ "DD_REMOTE_CONFIGURATION_ENABLED",
91
+ "DD_REMOTE_CONFIG_BOOT_TIMEOUT_SECONDS",
92
+ "DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS",
93
+ "DD_RODA_ANALYTICS_ENABLED",
94
+ "DD_RODA_ANALYTICS_SAMPLE_RATE",
95
+ "DD_RUNTIME_METRICS_ENABLED",
96
+ "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED",
97
+ "DD_SERVICE",
98
+ "DD_SITE",
99
+ "DD_SPAN_SAMPLING_RULES",
100
+ "DD_SPAN_SAMPLING_RULES_FILE",
101
+ "DD_TAGS",
102
+ "DD_TELEMETRY_AGENTLESS_URL",
103
+ "DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED",
104
+ "DD_TELEMETRY_HEARTBEAT_INTERVAL",
105
+ "DD_TELEMETRY_LOG_COLLECTION_ENABLED",
106
+ "DD_TELEMETRY_METRICS_AGGREGATION_INTERVAL",
107
+ "DD_TELEMETRY_METRICS_ENABLED",
108
+ "DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED",
109
+ "DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED",
110
+ "DD_TRACE_ACTION_CABLE_ANALYTICS_ENABLED",
111
+ "DD_TRACE_ACTION_CABLE_ANALYTICS_SAMPLE_RATE",
112
+ "DD_TRACE_ACTION_CABLE_ENABLED",
113
+ "DD_TRACE_ACTION_MAILER_ANALYTICS_ENABLED",
114
+ "DD_TRACE_ACTION_MAILER_ANALYTICS_SAMPLE_RATE",
115
+ "DD_TRACE_ACTION_MAILER_ENABLED",
116
+ "DD_TRACE_ACTION_PACK_ANALYTICS_ENABLED",
117
+ "DD_TRACE_ACTION_PACK_ANALYTICS_SAMPLE_RATE",
118
+ "DD_TRACE_ACTION_PACK_ENABLED",
119
+ "DD_TRACE_ACTION_VIEW_ANALYTICS_ENABLED",
120
+ "DD_TRACE_ACTION_VIEW_ANALYTICS_SAMPLE_RATE",
121
+ "DD_TRACE_ACTION_VIEW_ENABLED",
122
+ "DD_TRACE_ACTIVE_JOB_ANALYTICS_ENABLED",
123
+ "DD_TRACE_ACTIVE_JOB_ANALYTICS_SAMPLE_RATE",
124
+ "DD_TRACE_ACTIVE_JOB_ENABLED",
125
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_ENABLED",
126
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ANALYTICS_SAMPLE_RATE",
127
+ "DD_TRACE_ACTIVE_MODEL_SERIALIZERS_ENABLED",
128
+ "DD_TRACE_ACTIVE_RECORD_ANALYTICS_ENABLED",
129
+ "DD_TRACE_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE",
130
+ "DD_TRACE_ACTIVE_RECORD_ENABLED",
131
+ "DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_ENABLED",
132
+ "DD_TRACE_ACTIVE_SUPPORT_ANALYTICS_SAMPLE_RATE",
133
+ "DD_TRACE_ACTIVE_SUPPORT_ENABLED",
134
+ "DD_TRACE_AGENT_PORT",
135
+ "DD_TRACE_AGENT_TIMEOUT_SECONDS",
136
+ "DD_TRACE_AGENT_URL",
137
+ "DD_TRACE_ANALYTICS_ENABLED",
138
+ "DD_TRACE_AWS_ANALYTICS_ENABLED",
139
+ "DD_TRACE_AWS_ANALYTICS_SAMPLE_RATE",
140
+ "DD_TRACE_AWS_ENABLED",
141
+ "DD_TRACE_AWS_PEER_SERVICE",
142
+ "DD_TRACE_AWS_SERVICE_NAME",
143
+ "DD_TRACE_BAGGAGE_TAG_KEYS",
144
+ "DD_TRACE_CLIENT_IP_ENABLED",
145
+ "DD_TRACE_CLIENT_IP_HEADER",
146
+ "DD_TRACE_CONCURRENT_RUBY_ENABLED",
147
+ "DD_TRACE_DALLI_ANALYTICS_ENABLED",
148
+ "DD_TRACE_DALLI_ANALYTICS_SAMPLE_RATE",
149
+ "DD_TRACE_DALLI_ENABLED",
150
+ "DD_TRACE_DALLI_PEER_SERVICE",
151
+ "DD_TRACE_DALLI_SERVICE_NAME",
152
+ "DD_TRACE_DEBUG",
153
+ "DD_TRACE_DELAYED_JOB_ANALYTICS_ENABLED",
154
+ "DD_TRACE_DELAYED_JOB_ANALYTICS_SAMPLE_RATE",
155
+ "DD_TRACE_DELAYED_JOB_ENABLED",
156
+ "DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED",
157
+ "DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE",
158
+ "DD_TRACE_ELASTICSEARCH_ENABLED",
159
+ "DD_TRACE_ELASTICSEARCH_PEER_SERVICE",
160
+ "DD_TRACE_ELASTICSEARCH_SERVICE_NAME",
161
+ "DD_TRACE_ENABLED",
162
+ "DD_TRACE_ETHON_ANALYTICS_ENABLED",
163
+ "DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE",
164
+ "DD_TRACE_ETHON_ENABLED",
165
+ "DD_TRACE_ETHON_PEER_SERVICE",
166
+ "DD_TRACE_ETHON_SERVICE_NAME",
167
+ "DD_TRACE_EXCON_ANALYTICS_ENABLED",
168
+ "DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE",
169
+ "DD_TRACE_EXCON_ENABLED",
170
+ "DD_TRACE_EXCON_ERROR_STATUS_CODES",
171
+ "DD_TRACE_EXCON_PEER_SERVICE",
172
+ "DD_TRACE_EXCON_SERVICE_NAME",
173
+ "DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED",
174
+ "DD_TRACE_FARADAY_ANALYTICS_ENABLED",
175
+ "DD_TRACE_FARADAY_ANALYTICS_SAMPLE_RATE",
176
+ "DD_TRACE_FARADAY_ENABLED",
177
+ "DD_TRACE_FARADAY_ERROR_STATUS_CODES",
178
+ "DD_TRACE_FARADAY_PEER_SERVICE",
179
+ "DD_TRACE_FARADAY_SERVICE_NAME",
180
+ "DD_TRACE_GRAPE_ANALYTICS_ENABLED",
181
+ "DD_TRACE_GRAPE_ANALYTICS_SAMPLE_RATE",
182
+ "DD_TRACE_GRAPE_ENABLED",
183
+ "DD_TRACE_GRAPE_ERROR_STATUS_CODES",
184
+ "DD_TRACE_GRAPHQL_ANALYTICS_ENABLED",
185
+ "DD_TRACE_GRAPHQL_ANALYTICS_SAMPLE_RATE",
186
+ "DD_TRACE_GRAPHQL_ENABLED",
187
+ "DD_TRACE_GRAPHQL_ERROR_EXTENSIONS",
188
+ "DD_TRACE_GRAPHQL_ERROR_TRACKING",
189
+ "DD_TRACE_GRAPHQL_WITH_UNIFIED_TRACER",
190
+ "DD_TRACE_GRPC_ANALYTICS_ENABLED",
191
+ "DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE",
192
+ "DD_TRACE_GRPC_ENABLED",
193
+ "DD_TRACE_GRPC_PEER_SERVICE",
194
+ "DD_TRACE_GRPC_SERVICE_NAME",
195
+ "DD_TRACE_HANAMI_ENABLED",
196
+ "DD_TRACE_HEADER_TAGS",
197
+ "DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED",
198
+ "DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE",
199
+ "DD_TRACE_HTTPCLIENT_ENABLED",
200
+ "DD_TRACE_HTTPCLIENT_ERROR_STATUS_CODES",
201
+ "DD_TRACE_HTTPCLIENT_PEER_SERVICE",
202
+ "DD_TRACE_HTTPCLIENT_SERVICE_NAME",
203
+ "DD_TRACE_HTTPRB_ANALYTICS_ENABLED",
204
+ "DD_TRACE_HTTPRB_ANALYTICS_SAMPLE_RATE",
205
+ "DD_TRACE_HTTPRB_ENABLED",
206
+ "DD_TRACE_HTTPRB_ERROR_STATUS_CODES",
207
+ "DD_TRACE_HTTPRB_PEER_SERVICE",
208
+ "DD_TRACE_HTTPRB_SERVICE_NAME",
209
+ "DD_TRACE_HTTP_ANALYTICS_ENABLED",
210
+ "DD_TRACE_HTTP_ANALYTICS_SAMPLE_RATE",
211
+ "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES",
212
+ "DD_TRACE_HTTP_ENABLED",
213
+ "DD_TRACE_HTTP_ERROR_STATUS_CODES",
214
+ "DD_TRACE_HTTP_SERVER_ERROR_STATUSES",
215
+ "DD_TRACE_KAFKA_ANALYTICS_ENABLED",
216
+ "DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE",
217
+ "DD_TRACE_KAFKA_ENABLED",
218
+ "DD_TRACE_KARAFKA_ENABLED",
219
+ "DD_TRACE_LOGRAGE_ENABLED",
220
+ "DD_TRACE_MEMCACHED_COMMAND_ENABLED",
221
+ "DD_TRACE_MONGO_ANALYTICS_ENABLED",
222
+ "DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE",
223
+ "DD_TRACE_MONGO_ENABLED",
224
+ "DD_TRACE_MONGO_JSON_COMMAND",
225
+ "DD_TRACE_MONGO_PEER_SERVICE",
226
+ "DD_TRACE_MONGO_SERVICE_NAME",
227
+ "DD_TRACE_MYSQL2_ANALYTICS_ENABLED",
228
+ "DD_TRACE_MYSQL2_ANALYTICS_SAMPLE_RATE",
229
+ "DD_TRACE_MYSQL2_ENABLED",
230
+ "DD_TRACE_MYSQL2_PEER_SERVICE",
231
+ "DD_TRACE_MYSQL2_SERVICE_NAME",
232
+ "DD_TRACE_NATIVE_SPAN_EVENTS",
233
+ "DD_TRACE_NET_HTTP_PEER_SERVICE",
234
+ "DD_TRACE_NET_HTTP_SERVICE_NAME",
235
+ "DD_TRACE_OPENSEARCH_ANALYTICS_ENABLED",
236
+ "DD_TRACE_OPENSEARCH_ANALYTICS_SAMPLE_RATE",
237
+ "DD_TRACE_OPENSEARCH_ENABLED",
238
+ "DD_TRACE_OPENSEARCH_PEER_SERVICE",
239
+ "DD_TRACE_OPENSEARCH_RESOURCE_PATTERN",
240
+ "DD_TRACE_OPENSEARCH_SERVICE_NAME",
241
+ "DD_TRACE_PEER_SERVICE_DEFAULTS_ENABLED",
242
+ "DD_TRACE_PEER_SERVICE_MAPPING",
243
+ "DD_TRACE_PG_ANALYTICS_ENABLED",
244
+ "DD_TRACE_PG_ANALYTICS_SAMPLE_RATE",
245
+ "DD_TRACE_PG_ENABLED",
246
+ "DD_TRACE_PG_PEER_SERVICE",
247
+ "DD_TRACE_PG_SERVICE_NAME",
248
+ "DD_TRACE_PRESTO_ANALYTICS_ENABLED",
249
+ "DD_TRACE_PRESTO_ANALYTICS_SAMPLE_RATE",
250
+ "DD_TRACE_PRESTO_ENABLED",
251
+ "DD_TRACE_PRESTO_PEER_SERVICE",
252
+ "DD_TRACE_PRESTO_SERVICE_NAME",
253
+ "DD_TRACE_PROPAGATION_EXTRACT_FIRST",
254
+ "DD_TRACE_PROPAGATION_STYLE",
255
+ "DD_TRACE_PROPAGATION_STYLE_EXTRACT",
256
+ "DD_TRACE_PROPAGATION_STYLE_INJECT",
257
+ "DD_TRACE_QUE_ANALYTICS_ENABLED",
258
+ "DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE",
259
+ "DD_TRACE_QUE_ENABLED",
260
+ "DD_TRACE_QUE_TAG_ARGS_ENABLED",
261
+ "DD_TRACE_QUE_TAG_DATA_ENABLED",
262
+ "DD_TRACE_RACECAR_ANALYTICS_ENABLED",
263
+ "DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE",
264
+ "DD_TRACE_RACECAR_ENABLED",
265
+ "DD_TRACE_RACK_ANALYTICS_ENABLED",
266
+ "DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE",
267
+ "DD_TRACE_RACK_ENABLED",
268
+ "DD_TRACE_RAILS_ANALYTICS_ENABLED",
269
+ "DD_TRACE_RAILS_ANALYTICS_SAMPLE_RATE",
270
+ "DD_TRACE_RAILS_ENABLED",
271
+ "DD_TRACE_RAKE_ANALYTICS_ENABLED",
272
+ "DD_TRACE_RAKE_ANALYTICS_SAMPLE_RATE",
273
+ "DD_TRACE_RAKE_ENABLED",
274
+ "DD_TRACE_RATE_LIMIT",
275
+ "DD_TRACE_REDIS_ANALYTICS_ENABLED",
276
+ "DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE",
277
+ "DD_TRACE_REDIS_ENABLED",
278
+ "DD_TRACE_REDIS_PEER_SERVICE",
279
+ "DD_TRACE_REDIS_SERVICE_NAME",
280
+ "DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED",
281
+ "DD_TRACE_REPORT_HOSTNAME",
282
+ "DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT",
283
+ "DD_TRACE_RESOURCE_RENAMING_ENABLED",
284
+ "DD_TRACE_RESQUE_ANALYTICS_ENABLED",
285
+ "DD_TRACE_RESQUE_ANALYTICS_SAMPLE_RATE",
286
+ "DD_TRACE_RESQUE_ENABLED",
287
+ "DD_TRACE_REST_CLIENT_ANALYTICS_ENABLED",
288
+ "DD_TRACE_REST_CLIENT_ANALYTICS_SAMPLE_RATE",
289
+ "DD_TRACE_REST_CLIENT_ENABLED",
290
+ "DD_TRACE_REST_CLIENT_PEER_SERVICE",
291
+ "DD_TRACE_REST_CLIENT_SERVICE_NAME",
292
+ "DD_TRACE_RODA_ENABLED",
293
+ "DD_TRACE_SAMPLE_RATE",
294
+ "DD_TRACE_SAMPLING_RULES",
295
+ "DD_TRACE_SEMANTIC_LOGGER_ENABLED",
296
+ "DD_TRACE_SEQUEL_ANALYTICS_ENABLED",
297
+ "DD_TRACE_SEQUEL_ANALYTICS_SAMPLE_RATE",
298
+ "DD_TRACE_SEQUEL_ENABLED",
299
+ "DD_TRACE_SHORYUKEN_ANALYTICS_ENABLED",
300
+ "DD_TRACE_SHORYUKEN_ANALYTICS_SAMPLE_RATE",
301
+ "DD_TRACE_SHORYUKEN_ENABLED",
302
+ "DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED",
303
+ "DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE",
304
+ "DD_TRACE_SIDEKIQ_ENABLED",
305
+ "DD_TRACE_SINATRA_ANALYTICS_ENABLED",
306
+ "DD_TRACE_SINATRA_ANALYTICS_SAMPLE_RATE",
307
+ "DD_TRACE_SINATRA_ENABLED",
308
+ "DD_TRACE_SNEAKERS_ANALYTICS_ENABLED",
309
+ "DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE",
310
+ "DD_TRACE_SNEAKERS_ENABLED",
311
+ "DD_TRACE_STARTUP_LOGS",
312
+ "DD_TRACE_STRIPE_ANALYTICS_ENABLED",
313
+ "DD_TRACE_STRIPE_ANALYTICS_SAMPLE_RATE",
314
+ "DD_TRACE_STRIPE_ENABLED",
315
+ "DD_TRACE_SUCKER_PUNCH_ANALYTICS_ENABLED",
316
+ "DD_TRACE_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE",
317
+ "DD_TRACE_SUCKER_PUNCH_ENABLED",
318
+ "DD_TRACE_TEST_MODE_ENABLED",
319
+ "DD_TRACE_TRILOGY_ANALYTICS_ENABLED",
320
+ "DD_TRACE_TRILOGY_ANALYTICS_SAMPLE_RATE",
321
+ "DD_TRACE_TRILOGY_ENABLED",
322
+ "DD_TRACE_TRILOGY_PEER_SERVICE",
323
+ "DD_TRACE_TRILOGY_SERVICE_NAME",
324
+ "DD_TRACE_WATERDROP_ENABLED",
325
+ "DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH",
326
+ "DD_VERSION",
327
+ "OTEL_EXPORTER_OTLP_ENDPOINT",
328
+ "OTEL_EXPORTER_OTLP_HEADERS",
329
+ "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
330
+ "OTEL_EXPORTER_OTLP_METRICS_HEADERS",
331
+ "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL",
332
+ "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE",
333
+ "OTEL_EXPORTER_OTLP_METRICS_TIMEOUT",
334
+ "OTEL_EXPORTER_OTLP_PROTOCOL",
335
+ "OTEL_EXPORTER_OTLP_TIMEOUT",
336
+ "OTEL_LOG_LEVEL",
337
+ "OTEL_METRICS_EXPORTER",
338
+ "OTEL_METRIC_EXPORT_INTERVAL",
339
+ "OTEL_METRIC_EXPORT_TIMEOUT",
340
+ "OTEL_PROPAGATORS",
341
+ "OTEL_RESOURCE_ATTRIBUTES",
342
+ "OTEL_SERVICE_NAME",
343
+ "OTEL_TRACES_EXPORTER",
344
+ "OTEL_TRACES_SAMPLER",
345
+ "OTEL_TRACES_SAMPLER_ARG"].freeze
346
+
347
+ ALIASES =
348
+ {"DD_DISABLE_DATADOG_RAILS" => ["DISABLE_DATADOG_RAILS"],
349
+ "DD_PROFILING_GVL_ENABLED" => ["DD_PROFILING_PREVIEW_GVL_ENABLED"],
350
+ "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED" => ["DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED"],
351
+ "DD_SERVICE" => ["OTEL_SERVICE_NAME"],
352
+ "DD_TAGS" => ["OTEL_RESOURCE_ATTRIBUTES"],
353
+ "DD_TRACE_DEBUG" => ["OTEL_LOG_LEVEL"],
354
+ "DD_TRACE_ENABLED" => ["OTEL_TRACES_EXPORTER"],
355
+ "DD_TRACE_PROPAGATION_STYLE" => ["OTEL_PROPAGATORS"],
356
+ "DD_TRACE_SAMPLE_RATE" => ["OTEL_TRACES_SAMPLER"]}.freeze
357
+
358
+ DEPRECATIONS =
359
+ Set["DD_PROFILING_PREVIEW_GVL_ENABLED", "DISABLE_DATADOG_RAILS"]
360
+
361
+ ALIAS_TO_CANONICAL =
362
+ {"DD_PROFILING_PREVIEW_GVL_ENABLED" => "DD_PROFILING_GVL_ENABLED",
363
+ "DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED" => "DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED",
364
+ "DISABLE_DATADOG_RAILS" => "DD_DISABLE_DATADOG_RAILS",
365
+ "OTEL_LOG_LEVEL" => "DD_TRACE_DEBUG",
366
+ "OTEL_PROPAGATORS" => "DD_TRACE_PROPAGATION_STYLE",
367
+ "OTEL_RESOURCE_ATTRIBUTES" => "DD_TAGS",
368
+ "OTEL_SERVICE_NAME" => "DD_SERVICE",
369
+ "OTEL_TRACES_EXPORTER" => "DD_TRACE_ENABLED",
370
+ "OTEL_TRACES_SAMPLER" => "DD_TRACE_SAMPLE_RATE"}.freeze
371
+ end
372
+ end
373
+ end
@@ -238,7 +238,7 @@ module Datadog
238
238
  yield write_components
239
239
  rescue ThreadError => e
240
240
  logger_without_components.error(
241
- 'Detected deadlock during datadog initialization. ' \
241
+ "Detected deadlock during datadog initialization: #{e.class}: #{e}. " \
242
242
  'Please report this at https://github.com/datadog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
243
243
  "\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
244
244
  )
@@ -295,7 +295,7 @@ module Datadog
295
295
  # such as reading stable config. In this case we cannot access configuration.
296
296
 
297
297
  @temp_config_logger ||= begin
298
- debug_env_value = ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
298
+ debug_env_value = DATADOG_ENV[Ext::Diagnostics::ENV_DEBUG_ENABLED]&.strip&.downcase
299
299
  debug_value = debug_env_value == 'true' || debug_env_value == '1'
300
300
 
301
301
  logger = Core::Logger.new($stdout)
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Core
5
+ # Used to access ddsketch APIs.
6
+ # APIs in this class are implemented as native code.
7
+ class DDSketch
8
+ def self.supported?
9
+ Datadog::Core::LIBDATADOG_API_FAILURE.nil?
10
+ end
11
+
12
+ def initialize
13
+ unless self.class.supported?
14
+ raise(ArgumentError, "DDSketch is not supported: #{Datadog::Core::LIBDATADOG_API_FAILURE}")
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -14,10 +14,10 @@ module Datadog
14
14
  # @yieldreturn [String] a String with the lazily evaluated deprecation message.
15
15
  # @param [Boolean] disallowed_next_major whether this deprecation will be enforced in the next major release.
16
16
  # @param [Object] key A unique key for the deprecation. Only the first message with the same key will be logged.
17
- def log_deprecation(disallowed_next_major: true, key: nil)
17
+ def log_deprecation(disallowed_next_major: true, key: nil, logger: Datadog.logger)
18
18
  return unless log_deprecation?(key)
19
19
 
20
- Datadog.logger.warn do
20
+ logger.warn do
21
21
  message = yield
22
22
  message += ' This will be enforced in the next major release.' if disallowed_next_major
23
23
  message
@@ -10,40 +10,67 @@ module Datadog
10
10
  # about the current Linux container identity.
11
11
  # @see https://man7.org/linux/man-pages/man7/cgroups.7.html
12
12
  module Cgroup
13
- LINE_REGEX = /^(\d+):([^:]*):(.+)$/.freeze
14
-
15
- Descriptor = Struct.new(
16
- :id,
17
- :groups,
13
+ # A parsed cgroup entry from /proc/<pid>/cgroup
14
+ Entry = Struct.new(
15
+ :hierarchy,
16
+ :controllers,
18
17
  :path,
19
- :controllers
18
+ :inode
20
19
  )
21
20
 
22
21
  module_function
23
22
 
24
- def descriptors(process = 'self')
25
- [].tap do |descriptors|
26
- filepath = "/proc/#{process}/cgroup"
27
-
28
- if File.exist?(filepath)
29
- File.foreach("/proc/#{process}/cgroup") do |line|
30
- line = line.strip
31
- descriptors << parse(line) unless line.empty?
32
- end
33
- end
34
- rescue => e
35
- Datadog.logger.error(
36
- "Error while parsing cgroup. Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
37
- )
23
+ # Parses the /proc/self/cgroup file,
24
+ # @return [Array<Entry>] one entry for each valid cgroup line
25
+ def entries
26
+ filepath = '/proc/self/cgroup'
27
+ return [] unless File.exist?(filepath)
28
+
29
+ ret = []
30
+ File.foreach(filepath) do |entry_line|
31
+ ret << parse(entry_line) unless entry_line.empty?
38
32
  end
33
+ ret
39
34
  end
40
35
 
41
- def parse(line)
42
- id, groups, path = line.scan(LINE_REGEX).first
36
+ # Parses a single cgroup entry from /proc/<pid>/cgroup.
37
+ #
38
+ # Files can have cgroup v1 and v2 entries mixed. Their format is the same.
39
+ #
40
+ # Each entry has 3 colon-separated fields:
41
+ # hierarchy-ID:controllers:path
42
+ # Examples:
43
+ # 10:memory:/docker/1234567890abcdef (cgroup v1)
44
+ # 0::/docker/1234567890abcdef (cgroup v2)
45
+ #
46
+ # @see https://man7.org/linux/man-pages/man7/cgroups.7.html#:~:text=%2Fproc%2Fpid%2Fcgroup
47
+ # @return [Entry]
48
+ def parse(entry_line)
49
+ hierarchy, controllers, path = entry_line.split(':', 3)
43
50
 
44
- Descriptor.new(id, groups, path).tap do |descriptor|
45
- descriptor.controllers = groups.split(',') unless groups.nil?
46
- end
51
+ Entry.new(
52
+ hierarchy,
53
+ controllers,
54
+ path,
55
+ inode_for(controllers, path)
56
+ )
57
+ end
58
+
59
+ # We can find the container inode by running a file stat on the cgroup filesystem path.
60
+ # Example:
61
+ # For the entry `0:cpu:/docker/abc123`,
62
+ # we read `stat -c '%i' /sys/fs/cgroup/cpu/docker/abc123`
63
+ def inode_for(controllers, path)
64
+ return if controllers.nil? || path.nil?
65
+
66
+ # In cgroup v1, when multiple controllers are co-mounted, the controllers
67
+ # becomes part of the directory name (with commas preserved).
68
+ # Example entry:
69
+ # For the line "10:cpu,cpuacct:/docker/abc123", the path is
70
+ # "/sys/fs/cgroup/cpu,cpuacct/docker/abc123"
71
+ inode_path = File.join('/sys/fs/cgroup', controllers, path)
72
+
73
+ File.stat(inode_path).ino if File.exist?(inode_path)
47
74
  end
48
75
  end
49
76
  end