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
@@ -68,7 +68,7 @@ module Datadog
68
68
  ),
69
69
  DetectedConfiguration.new(
70
70
  friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_HOST} environment variable",
71
- value: ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_HOST]
71
+ value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_HOST]
72
72
  )
73
73
  )
74
74
  end
@@ -87,7 +87,7 @@ module Datadog
87
87
  ),
88
88
  try_parsing_as_integer(
89
89
  friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT} environment variable",
90
- value: ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT],
90
+ value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_PORT],
91
91
  )
92
92
  )
93
93
  end
@@ -118,7 +118,7 @@ module Datadog
118
118
  try_parsing_as_integer(
119
119
  friendly_name: "#{Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS} " \
120
120
  'environment variable',
121
- value: ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS],
121
+ value: DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_TIMEOUT_SECONDS],
122
122
  )
123
123
  )
124
124
  end
@@ -256,7 +256,7 @@ module Datadog
256
256
  def parsed_url
257
257
  return @parsed_url if defined?(@parsed_url)
258
258
 
259
- unparsed_url_from_env = ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_URL]
259
+ unparsed_url_from_env = DATADOG_ENV[Datadog::Core::Configuration::Ext::Agent::ENV_DEFAULT_URL]
260
260
 
261
261
  @parsed_url =
262
262
  if unparsed_url_from_env
@@ -3,6 +3,7 @@
3
3
  require_relative 'agent_settings_resolver'
4
4
  require_relative 'components_state'
5
5
  require_relative 'ext'
6
+ require_relative 'deprecations'
6
7
  require_relative '../diagnostics/environment_logger'
7
8
  require_relative '../diagnostics/health'
8
9
  require_relative '../logger'
@@ -13,11 +14,14 @@ require_relative '../remote/component'
13
14
  require_relative '../../tracing/component'
14
15
  require_relative '../../profiling/component'
15
16
  require_relative '../../appsec/component'
17
+ require_relative '../../ai_guard/component'
16
18
  require_relative '../../di/component'
19
+ require_relative '../../open_feature/component'
17
20
  require_relative '../../error_tracking/component'
18
21
  require_relative '../crashtracking/component'
19
22
  require_relative '../environment/agent_info'
20
23
  require_relative '../process_discovery'
24
+ require_relative '../../data_streams/processor'
21
25
 
22
26
  module Datadog
23
27
  module Core
@@ -25,8 +29,6 @@ module Datadog
25
29
  # Global components for the trace library.
26
30
  class Components
27
31
  class << self
28
- include Datadog::Tracing::Component
29
-
30
32
  def build_health_metrics(settings, logger, telemetry)
31
33
  settings = settings.health_metrics
32
34
  options = {enabled: settings.enabled}
@@ -47,6 +49,7 @@ module Datadog
47
49
  options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
48
50
  options[:services] = [settings.service] unless settings.service.nil?
49
51
  options[:experimental_runtime_id_enabled] = settings.runtime_metrics.experimental_runtime_id_enabled
52
+ options[:experimental_propagate_process_tags_enabled] = settings.experimental_propagate_process_tags_enabled
50
53
 
51
54
  Core::Runtime::Metrics.new(logger: logger, telemetry: telemetry, **options)
52
55
  end
@@ -76,12 +79,26 @@ module Datadog
76
79
 
77
80
  Datadog::Core::Crashtracking::Component.build(settings, agent_settings, logger: logger)
78
81
  end
79
- end
80
82
 
81
- include Datadog::Tracing::Component::InstanceMethods
83
+ def build_data_streams(settings, agent_settings, logger)
84
+ return unless settings.data_streams.enabled
85
+
86
+ Datadog::DataStreams::Processor.new(
87
+ interval: settings.data_streams.interval,
88
+ logger: logger,
89
+ settings: settings,
90
+ agent_settings: agent_settings
91
+ )
92
+ rescue => e
93
+ logger.warn("Failed to initialize Data Streams Monitoring: #{e.class}: #{e}")
94
+ nil
95
+ end
96
+ end
82
97
 
83
98
  attr_reader \
84
99
  :health_metrics,
100
+ :settings,
101
+ :agent_settings,
85
102
  :logger,
86
103
  :remote,
87
104
  :profiler,
@@ -92,16 +109,22 @@ module Datadog
92
109
  :error_tracking,
93
110
  :dynamic_instrumentation,
94
111
  :appsec,
95
- :agent_info
112
+ :ai_guard,
113
+ :agent_info,
114
+ :data_streams,
115
+ :open_feature
96
116
 
97
117
  def initialize(settings)
118
+ @settings = settings
98
119
  @logger = self.class.build_logger(settings)
99
120
  @environment_logger_extra = {}
121
+ StableConfig.log_result(@logger)
122
+ Deprecations.log_deprecations_from_all_sources(@logger)
100
123
 
101
124
  # This agent_settings is intended for use within Core. If you require
102
125
  # agent_settings within a product outside of core you should extend
103
126
  # the Core resolver from within your product/component's namespace.
104
- agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
127
+ @agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
105
128
 
106
129
  # Exposes agent capability information for detection by any components
107
130
  @agent_info = Core::Environment::AgentInfo.new(agent_settings, logger: @logger)
@@ -109,7 +132,7 @@ module Datadog
109
132
  @telemetry = self.class.build_telemetry(settings, agent_settings, @logger)
110
133
 
111
134
  @remote = Remote::Component.build(settings, agent_settings, logger: @logger, telemetry: telemetry)
112
- @tracer = self.class.build_tracer(settings, agent_settings, logger: @logger)
135
+ @tracer = Datadog::Tracing::Component.build_tracer(settings, agent_settings, logger: @logger)
113
136
  @crashtracker = self.class.build_crashtracker(settings, agent_settings, logger: @logger)
114
137
 
115
138
  @profiler, profiler_logger_extra = Datadog::Profiling::Component.build_profiler_component(
@@ -123,17 +146,28 @@ module Datadog
123
146
  @runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger, telemetry)
124
147
  @health_metrics = self.class.build_health_metrics(settings, @logger, telemetry)
125
148
  @appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
149
+ @ai_guard = Datadog::AIGuard::Component.build(settings, logger: @logger, telemetry: telemetry)
150
+ @open_feature = OpenFeature::Component.build(settings, agent_settings, logger: @logger, telemetry: telemetry)
126
151
  @dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
127
152
  @error_tracking = Datadog::ErrorTracking::Component.build(settings, @tracer, @logger)
153
+ @data_streams = self.class.build_data_streams(settings, agent_settings, @logger)
128
154
  @environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation
129
- @process_discovery_fd = Core::ProcessDiscovery.get_and_store_metadata(settings, @logger)
130
155
 
131
- self.class.configure_tracing(settings)
156
+ # Configure non-privileged components.
157
+ Datadog::Tracing::Contrib::Component.configure(settings)
158
+ end
159
+
160
+ # Hot-swaps with a new sampler.
161
+ # This operation acquires the Components lock to ensure
162
+ # there is no concurrent modification of the sampler.
163
+ def reconfigure_sampler(settings = Datadog.configuration)
164
+ sampler = Datadog::Tracing::Component.build_sampler(settings)
165
+ Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
132
166
  end
133
167
 
134
168
  # Starts up components
135
169
  def startup!(settings, old_state: nil)
136
- telemetry.start(old_state&.telemetry_enabled?)
170
+ telemetry.start(old_state&.telemetry_enabled?, components: self)
137
171
 
138
172
  if settings.profiling.enabled
139
173
  if profiler
@@ -155,6 +189,11 @@ module Datadog
155
189
  remote&.start
156
190
  end
157
191
 
192
+ # This should stay here, not in initialize. During reconfiguration, the order of the calls is:
193
+ # initialize new components, shutdown old components, startup new components.
194
+ # Because this is a singleton, if we call it in initialize, it will be shutdown right away.
195
+ Core::ProcessDiscovery.publish(settings)
196
+
158
197
  Core::Diagnostics::EnvironmentLogger.collect_and_log!(@environment_logger_extra)
159
198
  end
160
199
 
@@ -168,9 +207,15 @@ module Datadog
168
207
  # Shutdown DI after remote, since remote config triggers DI operations.
169
208
  dynamic_instrumentation&.shutdown!
170
209
 
210
+ # Shutdown OpenFeature component
211
+ open_feature&.shutdown!
212
+
171
213
  # Decommission AppSec
172
214
  appsec&.shutdown!
173
215
 
216
+ # Shutdown AIGuard component
217
+ ai_guard&.shutdown!
218
+
174
219
  # Shutdown the old tracer, unless it's still being used.
175
220
  # (e.g. a custom tracer instance passed in.)
176
221
  tracer.shutdown! unless replacement && tracer.equal?(replacement.tracer)
@@ -181,6 +226,9 @@ module Datadog
181
226
  # Shutdown workers
182
227
  runtime_metrics.stop(true, close_metrics: false)
183
228
 
229
+ # Shutdown Data Streams Monitoring processor
230
+ data_streams&.stop(true)
231
+
184
232
  # Shutdown the old metrics, unless they are still being used.
185
233
  # (e.g. custom Statsd instances.)
186
234
  #
@@ -210,7 +258,7 @@ module Datadog
210
258
  telemetry.emit_closing! unless replacement&.telemetry&.enabled
211
259
  telemetry.shutdown!
212
260
 
213
- @process_discovery_fd&.shutdown!
261
+ Core::ProcessDiscovery.shutdown!
214
262
  end
215
263
 
216
264
  # Returns the current state of various components.
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'supported_configurations'
4
+ require_relative '../logger'
5
+
6
+ module Datadog
7
+ module Core
8
+ module Configuration
9
+ class ConfigHelper
10
+ def initialize(
11
+ source_env: ENV,
12
+ supported_configurations: SUPPORTED_CONFIGURATION_NAMES,
13
+ aliases: ALIASES,
14
+ alias_to_canonical: ALIAS_TO_CANONICAL,
15
+ raise_on_unknown_env_var: false
16
+ )
17
+ @source_env = source_env
18
+ @supported_configurations = supported_configurations
19
+ @aliases = aliases
20
+ @alias_to_canonical = alias_to_canonical
21
+ @raise_on_unknown_env_var = raise_on_unknown_env_var
22
+ end
23
+
24
+ def [](name)
25
+ get_environment_variable(name)
26
+ end
27
+
28
+ def fetch(name, default_value = UNSET)
29
+ if (item = get_environment_variable(name))
30
+ return item
31
+ end
32
+
33
+ return yield(name) if block_given?
34
+ return default_value unless default_value == UNSET
35
+
36
+ raise KeyError, "key not found: #{name}"
37
+ end
38
+
39
+ def key?(name)
40
+ !get_environment_variable(name).nil?
41
+ end
42
+
43
+ alias_method :has_key?, :key?
44
+ alias_method :include?, :key?
45
+ alias_method :member?, :key?
46
+
47
+ # Returns the environment variable value if the environment variable is a supported Datadog configuration (starts with DD_ or OTEL_)
48
+ # or if it is not a Datadog configuration. Otherwise, it returns nil.
49
+ #
50
+ # @param name [String] Environment variable name
51
+ # @param default_value [String, nil] Default value to return if the environment variable is not set
52
+ # @param source_env [Hash[String, String]] Environment variables to use
53
+ # @return [String, nil] The environment variable value
54
+ # @raise [RuntimeError] if the configuration is not supported
55
+ def get_environment_variable(name, default_value = nil, source_env: @source_env)
56
+ # datadog-ci-rb is using dd-trace-rb config DSL, which uses this method.
57
+ # Until we've correctly implemented support for datadog-ci-rb, we disable config inversion if ci is enabled.
58
+ if !defined?(::Datadog::CI) &&
59
+ (name.start_with?('DD_', 'OTEL_') || @alias_to_canonical[name]) &&
60
+ !@supported_configurations.include?(name)
61
+ if defined?(@raise_on_unknown_env_var) && @raise_on_unknown_env_var # Only enabled for tests!
62
+ if @alias_to_canonical[name]
63
+ raise "Please use #{@alias_to_canonical[name]} instead of #{name}. See docs/AccessEnvironmentVariables.md for details."
64
+ else
65
+ raise "Missing #{name} env/configuration in \"supported-configurations.json\" file. See docs/AccessEnvironmentVariables.md for details."
66
+ end
67
+ end
68
+ # TODO: Send telemetry to know if we ever miss an env var
69
+ return nil
70
+ end
71
+
72
+ env_value = source_env[name]
73
+ if env_value.nil? && @aliases[name]
74
+ @aliases[name].each do |alias_name|
75
+ return source_env[alias_name] if source_env[alias_name]
76
+ end
77
+ end
78
+
79
+ env_value || default_value
80
+ end
81
+
82
+ # Only used in error message creation. Match get_environment_variable logic to return the resolved environment variable name.
83
+ def resolve_env(name, source_env: @source_env)
84
+ if source_env[name].nil? && @aliases[name]
85
+ @aliases[name].each do |alias_name|
86
+ return alias_name if source_env[alias_name]
87
+ end
88
+ end
89
+
90
+ name
91
+ end
92
+
93
+ # Anchor object that represents an undefined default value.
94
+ # This is necessary because `nil` is a valid default value.
95
+ UNSET = Object.new
96
+ private_constant :UNSET
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'supported_configurations'
4
+ require_relative '../logger'
5
+ require_relative '../utils/only_once'
6
+
7
+ module Datadog
8
+ module Core
9
+ module Configuration
10
+ module Deprecations
11
+ LOG_DEPRECATIONS_ONLY_ONCE = Datadog::Core::Utils::OnlyOnce.new
12
+
13
+ def self.log_deprecations_from_all_sources(logger, deprecations: DEPRECATIONS, alias_to_canonical: ALIAS_TO_CANONICAL)
14
+ LOG_DEPRECATIONS_ONLY_ONCE.run do
15
+ log_deprecated_environment_variables(logger, ENV, 'environment', deprecations, alias_to_canonical)
16
+ customer_config = StableConfig.configuration.dig(:local, :config)
17
+ log_deprecated_environment_variables(logger, customer_config, 'local', deprecations, alias_to_canonical) if customer_config
18
+ fleet_config = StableConfig.configuration.dig(:fleet, :config)
19
+ log_deprecated_environment_variables(logger, fleet_config, 'fleet', deprecations, alias_to_canonical) if fleet_config
20
+ end
21
+ end
22
+
23
+ private_class_method def self.log_deprecated_environment_variables(logger, source_env, source_name, deprecations, alias_to_canonical)
24
+ deprecations.each do |deprecated_env_var|
25
+ next unless source_env.key?(deprecated_env_var)
26
+
27
+ Datadog::Core.log_deprecation(disallowed_next_major: false, logger: logger) do
28
+ "#{deprecated_env_var} #{source_name} variable is deprecated" +
29
+ (alias_to_canonical[deprecated_env_var] ? ", use #{alias_to_canonical[deprecated_env_var]} instead." : ".")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -9,7 +9,6 @@ module Datadog
9
9
  # @public_api
10
10
  module Diagnostics
11
11
  ENV_DEBUG_ENABLED = 'DD_TRACE_DEBUG'
12
- ENV_OTEL_LOG_LEVEL = 'OTEL_LOG_LEVEL'
13
12
  ENV_HEALTH_METRICS_ENABLED = 'DD_HEALTH_METRICS_ENABLED'
14
13
  ENV_STARTUP_LOGS_ENABLED = 'DD_TRACE_STARTUP_LOGS'
15
14
  end
@@ -15,7 +15,7 @@ module Datadog
15
15
  # @!attribute [r] precedence_set
16
16
  # When this option was last set, what was the value precedence used?
17
17
  # @return [Precedence::Value]
18
- attr_reader :definition, :precedence_set, :resolved_env
18
+ attr_reader :definition, :precedence_set
19
19
 
20
20
  # Option setting precedence.
21
21
  module Precedence
@@ -68,7 +68,6 @@ module Datadog
68
68
  @context = context
69
69
  @value = nil
70
70
  @is_set = false
71
- @resolved_env = nil
72
71
 
73
72
  # One value is stored per precedence, to allow unsetting a higher
74
73
  # precedence value and falling back to a lower precedence one.
@@ -84,7 +83,7 @@ module Datadog
84
83
  #
85
84
  # @param value [Object] the new value to be associated with this option
86
85
  # @param precedence [Precedence] from what precedence order this new value comes from
87
- def set(value, precedence: Precedence::PROGRAMMATIC, resolved_env: nil)
86
+ def set(value, precedence: Precedence::PROGRAMMATIC)
88
87
  # Is there a higher precedence value set?
89
88
  if @precedence_set > precedence
90
89
  # This should be uncommon, as higher precedence values tend to
@@ -103,7 +102,7 @@ module Datadog
103
102
  return @value
104
103
  end
105
104
 
106
- internal_set(value, precedence, resolved_env)
105
+ internal_set(value, precedence)
107
106
  end
108
107
 
109
108
  def unset(precedence)
@@ -121,7 +120,7 @@ module Datadog
121
120
  # Look for value that is set.
122
121
  # The hash `@value_per_precedence` has a custom default value of `UNSET`.
123
122
  if (value = @value_per_precedence[p]) != UNSET
124
- internal_set(value, p, nil)
123
+ internal_set(value, p)
125
124
  return nil
126
125
  end
127
126
  end
@@ -189,7 +188,7 @@ module Datadog
189
188
  values = value.split(',') # By default we only want to support comma separated strings
190
189
 
191
190
  values.each_with_object({}) do |v, hash| # $ Hash[String, String]
192
- v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
191
+ v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
193
192
  next if v.empty?
194
193
 
195
194
  pair = v.split(':', 2)
@@ -203,7 +202,7 @@ module Datadog
203
202
  values = value.split(',')
204
203
 
205
204
  values.each_with_object([]) do |v, arr| # $ Array[String]
206
- v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
205
+ v.gsub!(/\A[\s,]*+|[\s,]*+\Z/, '')
207
206
  next if v.empty?
208
207
 
209
208
  arr << v
@@ -281,12 +280,11 @@ module Datadog
281
280
  end
282
281
 
283
282
  # Directly manipulates the current value and currently set precedence.
284
- def internal_set(value, precedence, resolved_env)
283
+ def internal_set(value, precedence)
285
284
  old_value = @value
286
285
  (@value = context_exec(validate_type(value), old_value, &definition.setter)).tap do |v|
287
286
  @is_set = true
288
287
  @precedence_set = precedence
289
- @resolved_env = resolved_env
290
288
  # Store original value to ensure we can always safely call `#internal_set`
291
289
  # when restoring a value from `@value_per_precedence`, and we are only running `definition.setter`
292
290
  # on the original value, not on a value that has already been processed by `definition.setter`.
@@ -308,59 +306,56 @@ module Datadog
308
306
  end
309
307
 
310
308
  def set_env_value
311
- value, resolved_env = get_value_and_resolved_env_from(ENV)
312
- set(value, precedence: Precedence::ENVIRONMENT, resolved_env: resolved_env) unless value.nil?
309
+ value = get_value_from_env
310
+ set(value, precedence: Precedence::ENVIRONMENT) unless value.nil?
313
311
  end
314
312
 
315
313
  def set_customer_stable_config_value
316
314
  customer_config = StableConfig.configuration.dig(:local, :config)
317
315
  return if customer_config.nil?
318
316
 
319
- value, resolved_env = get_value_and_resolved_env_from(customer_config, source: 'local stable config')
320
- set(value, precedence: Precedence::LOCAL_STABLE, resolved_env: resolved_env) unless value.nil?
317
+ value = get_value_from(customer_config, 'local')
318
+ set(value, precedence: Precedence::LOCAL_STABLE) unless value.nil?
321
319
  end
322
320
 
323
321
  def set_fleet_stable_config_value
324
322
  fleet_config = StableConfig.configuration.dig(:fleet, :config)
325
323
  return if fleet_config.nil?
326
324
 
327
- value, resolved_env = get_value_and_resolved_env_from(fleet_config, source: 'fleet stable config')
328
- set(value, precedence: Precedence::FLEET_STABLE, resolved_env: resolved_env) unless value.nil?
325
+ value = get_value_from(fleet_config, 'fleet')
326
+ set(value, precedence: Precedence::FLEET_STABLE) unless value.nil?
329
327
  end
330
328
 
331
- def get_value_and_resolved_env_from(env_vars, source: 'environment variable')
332
- value = nil
333
- resolved_env = nil
329
+ def get_value_from_env
330
+ env = definition.env
331
+ return unless env
334
332
 
335
- if definition.env
336
- # @type var env_and_aliases: Array[String]
337
- env_and_aliases = Array(definition.env)
338
- env_and_aliases.each do |env|
339
- env_value = env_vars[env]
340
- next if env_value.nil?
341
-
342
- resolved_env = env
343
- value = coerce_env_variable(env_value)
344
- break
345
- end
346
- end
347
-
348
- deprecated_env = definition.deprecated_env ? env_vars[definition.deprecated_env] : nil
349
- if value.nil? && deprecated_env
350
- resolved_env = definition.deprecated_env
351
- value = coerce_env_variable(deprecated_env)
333
+ value = DATADOG_ENV[env]
334
+ coerce_env_variable(value) unless value.nil?
335
+ rescue ArgumentError
336
+ # This will be raised when the type is set to :int or :float but an invalid env var value is provided.
337
+ raise ArgumentError,
338
+ # ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
339
+ # @type var env: String
340
+ "Expected environment variable #{DATADOG_ENV.resolve_env(env)} " \
341
+ "to be a #{definition.type}, but '#{value}' was provided."
342
+ end
352
343
 
353
- Datadog::Core.log_deprecation do
354
- "#{definition.deprecated_env} #{source} is deprecated, use #{definition.env} instead."
355
- end
356
- end
344
+ def get_value_from(source_env, source_name)
345
+ env = definition.env
346
+ return unless env
357
347
 
358
- [value, resolved_env]
348
+ # An instance of ConfigHelper could be used with any Hash but this is the only place where
349
+ # it's used with something else than ENV, let's keep it simple for now by overriding the source_env parameter.
350
+ value = DATADOG_ENV.get_environment_variable(env, source_env: source_env)
351
+ coerce_env_variable(value) unless value.nil?
359
352
  rescue ArgumentError
360
- env_value = resolved_env ? env_vars[resolved_env] : nil
353
+ # This will be raised when the type is set to :int or :float but an invalid env var value is provided.
361
354
  raise ArgumentError,
362
- "Expected #{source} #{resolved_env} to be a #{definition.type}, " \
363
- "but '#{env_value}' was provided"
355
+ # ArgumentError will be thrown from coerce_env_variable, so we've already checked that env is not nil.
356
+ # @type var env: String
357
+ "Expected #{source_name} configuration file variable #{DATADOG_ENV.resolve_env(env, source_env: source_env)} " \
358
+ "to be a #{definition.type}, but '#{value}' was provided."
364
359
  end
365
360
 
366
361
  # Anchor object that represents a value that is not set.
@@ -13,7 +13,6 @@ module Datadog
13
13
  :default,
14
14
  :default_proc,
15
15
  :env,
16
- :deprecated_env,
17
16
  :env_parser,
18
17
  :name,
19
18
  :after_set,
@@ -26,7 +25,6 @@ module Datadog
26
25
  @default = meta[:default]
27
26
  @default_proc = meta[:default_proc]
28
27
  @env = meta[:env]
29
- @deprecated_env = meta[:deprecated_env]
30
28
  @env_parser = meta[:env_parser]
31
29
  @name = name.to_sym
32
30
  @after_set = meta[:after_set]
@@ -44,14 +42,14 @@ module Datadog
44
42
  # Acts as DSL for building OptionDefinitions
45
43
  # @public_api
46
44
  class Builder
47
- InvalidOptionError = Class.new(StandardError)
45
+ # Steep: https://github.com/soutaro/steep/issues/1880
46
+ InvalidOptionError = Class.new(StandardError) # steep:ignore IncompatibleAssignment
48
47
 
49
48
  attr_reader \
50
49
  :helpers
51
50
 
52
51
  def initialize(name, options = {})
53
52
  @env = nil
54
- @deprecated_env = nil
55
53
  @env_parser = nil
56
54
  @default = nil
57
55
  @default_proc = nil
@@ -75,10 +73,6 @@ module Datadog
75
73
  @env = value
76
74
  end
77
75
 
78
- def deprecated_env(value) # standard:disable Style/TrivialAccessors
79
- @deprecated_env = value
80
- end
81
-
82
76
  # Invoked when the option is first read, and {#env} is defined.
83
77
  # The block provided is only invoked if the environment variable is present (not-nil).
84
78
  def env_parser(&block)
@@ -123,11 +117,11 @@ module Datadog
123
117
  default(options[:default]) if options.key?(:default)
124
118
  default_proc(&options[:default_proc]) if options.key?(:default_proc)
125
119
  env(options[:env]) if options.key?(:env)
126
- deprecated_env(options[:deprecated_env]) if options.key?(:deprecated_env)
127
120
  env_parser(&options[:env_parser]) if options.key?(:env_parser)
128
121
  after_set(&options[:after_set]) if options.key?(:after_set)
129
122
  resetter(&options[:resetter]) if options.key?(:resetter)
130
- setter(&options[:setter]) if options.key?(:setter)
123
+ # Steep: https://github.com/soutaro/steep/issues/1979
124
+ setter(&options[:setter]) if options.key?(:setter) # steep:ignore BlockTypeMismatch
131
125
  type(options[:type], **(options[:type_options] || {})) if options.key?(:type)
132
126
  end
133
127
 
@@ -140,7 +134,6 @@ module Datadog
140
134
  default: @default,
141
135
  default_proc: @default_proc,
142
136
  env: @env,
143
- deprecated_env: @deprecated_env,
144
137
  env_parser: @env_parser,
145
138
  after_set: @after_set,
146
139
  resetter: @resetter,
@@ -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
  {
@@ -73,7 +75,7 @@ module Datadog
73
75
  end
74
76
 
75
77
  def set_option(name, value, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
76
- resolve_option(name).set(value, precedence: precedence, resolved_env: resolved_env(name))
78
+ resolve_option(name).set(value, precedence: precedence)
77
79
  end
78
80
 
79
81
  def unset_option(name, precedence: Configuration::Option::Precedence::PROGRAMMATIC)
@@ -122,16 +124,13 @@ module Datadog
122
124
  options[name] = definition.build(self)
123
125
  end
124
126
 
125
- def resolved_env(name)
126
- options[name].resolved_env if options.key?(name)
127
- end
128
-
129
127
  def assert_valid_option!(name)
130
128
  raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
131
129
  end
132
130
  end
133
131
 
134
- InvalidOptionError = Class.new(StandardError)
132
+ # Steep: https://github.com/soutaro/steep/issues/1880
133
+ InvalidOptionError = Class.new(StandardError) # steep:ignore IncompatibleAssignment
135
134
  end
136
135
  end
137
136
  end