datadog 2.21.0 → 2.23.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 (205) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +106 -2
  3. data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
  4. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  5. data/ext/datadog_profiling_native_extension/collectors_stack.c +4 -0
  6. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
  7. data/ext/datadog_profiling_native_extension/extconf.rb +6 -4
  8. data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
  9. data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
  10. data/ext/libdatadog_api/ddsketch.c +106 -0
  11. data/ext/libdatadog_api/feature_flags.c +554 -0
  12. data/ext/libdatadog_api/feature_flags.h +5 -0
  13. data/ext/libdatadog_api/init.c +5 -0
  14. data/ext/libdatadog_api/library_config.c +34 -25
  15. data/ext/libdatadog_api/process_discovery.c +19 -13
  16. data/ext/libdatadog_extconf_helpers.rb +1 -1
  17. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  18. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  19. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  20. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  21. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  22. data/lib/datadog/appsec/api_security/route_extractor.rb +23 -6
  23. data/lib/datadog/appsec/api_security/sampler.rb +7 -4
  24. data/lib/datadog/appsec/assets/blocked.html +8 -0
  25. data/lib/datadog/appsec/assets/blocked.json +1 -1
  26. data/lib/datadog/appsec/assets/blocked.text +3 -1
  27. data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
  28. data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
  29. data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
  30. data/lib/datadog/appsec/assets.rb +1 -1
  31. data/lib/datadog/appsec/compressed_json.rb +1 -1
  32. data/lib/datadog/appsec/configuration/settings.rb +9 -0
  33. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
  34. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
  35. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
  36. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
  37. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
  38. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
  39. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
  40. data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
  41. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
  42. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
  43. data/lib/datadog/appsec/event.rb +12 -14
  44. data/lib/datadog/appsec/metrics/collector.rb +19 -3
  45. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
  46. data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
  47. data/lib/datadog/appsec/remote.rb +29 -13
  48. data/lib/datadog/appsec/response.rb +18 -4
  49. data/lib/datadog/appsec/security_engine/result.rb +28 -9
  50. data/lib/datadog/appsec/security_engine/runner.rb +17 -7
  51. data/lib/datadog/appsec/security_event.rb +5 -7
  52. data/lib/datadog/core/configuration/components.rb +44 -9
  53. data/lib/datadog/core/configuration/config_helper.rb +1 -1
  54. data/lib/datadog/core/configuration/settings.rb +14 -0
  55. data/lib/datadog/core/configuration/stable_config.rb +10 -0
  56. data/lib/datadog/core/configuration/supported_configurations.rb +330 -299
  57. data/lib/datadog/core/configuration.rb +1 -1
  58. data/lib/datadog/core/ddsketch.rb +19 -0
  59. data/lib/datadog/core/environment/ext.rb +6 -0
  60. data/lib/datadog/core/environment/process.rb +79 -0
  61. data/lib/datadog/core/environment/yjit.rb +2 -1
  62. data/lib/datadog/core/feature_flags.rb +61 -0
  63. data/lib/datadog/core/pin.rb +4 -8
  64. data/lib/datadog/core/process_discovery.rb +4 -2
  65. data/lib/datadog/core/remote/client/capabilities.rb +7 -0
  66. data/lib/datadog/core/remote/component.rb +4 -6
  67. data/lib/datadog/core/remote/transport/config.rb +2 -10
  68. data/lib/datadog/core/remote/transport/http/config.rb +9 -9
  69. data/lib/datadog/core/remote/transport/http/negotiation.rb +17 -8
  70. data/lib/datadog/core/remote/transport/http.rb +2 -0
  71. data/lib/datadog/core/remote/transport/negotiation.rb +2 -18
  72. data/lib/datadog/core/remote/worker.rb +25 -37
  73. data/lib/datadog/core/tag_builder.rb +0 -4
  74. data/lib/datadog/core/tag_normalizer.rb +84 -0
  75. data/lib/datadog/core/telemetry/component.rb +18 -3
  76. data/lib/datadog/core/telemetry/emitter.rb +6 -6
  77. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  78. data/lib/datadog/core/telemetry/event/app_started.rb +52 -49
  79. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
  80. data/lib/datadog/core/telemetry/event.rb +1 -0
  81. data/lib/datadog/core/telemetry/logger.rb +2 -2
  82. data/lib/datadog/core/telemetry/logging.rb +2 -8
  83. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -6
  84. data/lib/datadog/core/telemetry/transport/telemetry.rb +1 -2
  85. data/lib/datadog/core/transport/http/client.rb +69 -0
  86. data/lib/datadog/core/transport/response.rb +4 -1
  87. data/lib/datadog/core/utils/array.rb +29 -0
  88. data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
  89. data/lib/datadog/core/utils/network.rb +22 -1
  90. data/lib/datadog/core/utils/only_once_successful.rb +6 -2
  91. data/lib/datadog/core/utils.rb +2 -0
  92. data/lib/datadog/data_streams/configuration/settings.rb +49 -0
  93. data/lib/datadog/data_streams/configuration.rb +11 -0
  94. data/lib/datadog/data_streams/ext.rb +11 -0
  95. data/lib/datadog/data_streams/extensions.rb +16 -0
  96. data/lib/datadog/data_streams/pathway_context.rb +169 -0
  97. data/lib/datadog/data_streams/processor.rb +509 -0
  98. data/lib/datadog/data_streams/transport/http/api.rb +33 -0
  99. data/lib/datadog/data_streams/transport/http/client.rb +21 -0
  100. data/lib/datadog/data_streams/transport/http/stats.rb +87 -0
  101. data/lib/datadog/data_streams/transport/http.rb +41 -0
  102. data/lib/datadog/data_streams/transport/stats.rb +60 -0
  103. data/lib/datadog/data_streams.rb +100 -0
  104. data/lib/datadog/di/boot.rb +1 -0
  105. data/lib/datadog/di/component.rb +14 -16
  106. data/lib/datadog/di/context.rb +70 -0
  107. data/lib/datadog/di/el/compiler.rb +164 -0
  108. data/lib/datadog/di/el/evaluator.rb +159 -0
  109. data/lib/datadog/di/el/expression.rb +42 -0
  110. data/lib/datadog/di/el.rb +5 -0
  111. data/lib/datadog/di/error.rb +29 -0
  112. data/lib/datadog/di/instrumenter.rb +163 -48
  113. data/lib/datadog/di/probe.rb +55 -15
  114. data/lib/datadog/di/probe_builder.rb +39 -1
  115. data/lib/datadog/di/probe_manager.rb +13 -4
  116. data/lib/datadog/di/probe_notification_builder.rb +105 -67
  117. data/lib/datadog/di/proc_responder.rb +32 -0
  118. data/lib/datadog/di/serializer.rb +151 -7
  119. data/lib/datadog/di/transport/diagnostics.rb +2 -2
  120. data/lib/datadog/di/transport/http/diagnostics.rb +2 -4
  121. data/lib/datadog/di/transport/http/input.rb +2 -4
  122. data/lib/datadog/di/transport/http.rb +6 -2
  123. data/lib/datadog/di/transport/input.rb +64 -4
  124. data/lib/datadog/open_feature/component.rb +60 -0
  125. data/lib/datadog/open_feature/configuration.rb +27 -0
  126. data/lib/datadog/open_feature/evaluation_engine.rb +69 -0
  127. data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
  128. data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
  129. data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
  130. data/lib/datadog/open_feature/exposures/event.rb +60 -0
  131. data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
  132. data/lib/datadog/open_feature/exposures/worker.rb +116 -0
  133. data/lib/datadog/open_feature/ext.rb +14 -0
  134. data/lib/datadog/open_feature/native_evaluator.rb +38 -0
  135. data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
  136. data/lib/datadog/open_feature/provider.rb +141 -0
  137. data/lib/datadog/open_feature/remote.rb +74 -0
  138. data/lib/datadog/open_feature/resolution_details.rb +35 -0
  139. data/lib/datadog/open_feature/transport.rb +72 -0
  140. data/lib/datadog/open_feature.rb +19 -0
  141. data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
  142. data/lib/datadog/opentelemetry/metrics.rb +110 -0
  143. data/lib/datadog/opentelemetry/sdk/configurator.rb +25 -1
  144. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +38 -0
  145. data/lib/datadog/opentelemetry.rb +3 -0
  146. data/lib/datadog/profiling/collectors/code_provenance.rb +15 -6
  147. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +1 -1
  148. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  149. data/lib/datadog/profiling/profiler.rb +4 -0
  150. data/lib/datadog/profiling/tag_builder.rb +36 -3
  151. data/lib/datadog/profiling.rb +1 -2
  152. data/lib/datadog/single_step_instrument.rb +1 -1
  153. data/lib/datadog/tracing/component.rb +6 -17
  154. data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
  155. data/lib/datadog/tracing/configuration/ext.rb +9 -0
  156. data/lib/datadog/tracing/configuration/settings.rb +77 -3
  157. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  158. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
  159. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
  160. data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
  161. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
  162. data/lib/datadog/tracing/contrib/component.rb +2 -2
  163. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
  164. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
  165. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
  166. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
  167. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  168. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  169. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +74 -44
  170. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
  171. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
  172. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
  173. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
  174. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
  175. data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
  176. data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
  177. data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
  178. data/lib/datadog/tracing/contrib/karafka/patcher.rb +32 -0
  179. data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
  180. data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
  181. data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
  182. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
  183. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
  184. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
  185. data/lib/datadog/tracing/contrib/status_range_matcher.rb +7 -0
  186. data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
  187. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
  188. data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
  189. data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
  190. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
  191. data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +46 -0
  192. data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
  193. data/lib/datadog/tracing/contrib/waterdrop.rb +37 -0
  194. data/lib/datadog/tracing/contrib.rb +1 -0
  195. data/lib/datadog/tracing/metadata/ext.rb +9 -1
  196. data/lib/datadog/tracing/transport/http/client.rb +12 -26
  197. data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
  198. data/lib/datadog/tracing/transport/traces.rb +3 -5
  199. data/lib/datadog/version.rb +2 -2
  200. data/lib/datadog.rb +2 -0
  201. metadata +92 -16
  202. data/ext/libdatadog_api/macos_development.md +0 -26
  203. data/lib/datadog/core/remote/transport/http/client.rb +0 -49
  204. data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
  205. data/lib/datadog/di/transport/http/client.rb +0 -47
@@ -15,10 +15,12 @@ require_relative '../../tracing/component'
15
15
  require_relative '../../profiling/component'
16
16
  require_relative '../../appsec/component'
17
17
  require_relative '../../di/component'
18
+ require_relative '../../open_feature/component'
18
19
  require_relative '../../error_tracking/component'
19
20
  require_relative '../crashtracking/component'
20
21
  require_relative '../environment/agent_info'
21
22
  require_relative '../process_discovery'
23
+ require_relative '../../data_streams/processor'
22
24
 
23
25
  module Datadog
24
26
  module Core
@@ -26,8 +28,6 @@ module Datadog
26
28
  # Global components for the trace library.
27
29
  class Components
28
30
  class << self
29
- include Datadog::Tracing::Component
30
-
31
31
  def build_health_metrics(settings, logger, telemetry)
32
32
  settings = settings.health_metrics
33
33
  options = {enabled: settings.enabled}
@@ -77,12 +77,26 @@ module Datadog
77
77
 
78
78
  Datadog::Core::Crashtracking::Component.build(settings, agent_settings, logger: logger)
79
79
  end
80
- end
81
80
 
82
- include Datadog::Tracing::Component::InstanceMethods
81
+ def build_data_streams(settings, agent_settings, logger)
82
+ return unless settings.data_streams.enabled
83
+
84
+ Datadog::DataStreams::Processor.new(
85
+ interval: settings.data_streams.interval,
86
+ logger: logger,
87
+ settings: settings,
88
+ agent_settings: agent_settings
89
+ )
90
+ rescue => e
91
+ logger.warn("Failed to initialize Data Streams Monitoring: #{e.class}: #{e}")
92
+ nil
93
+ end
94
+ end
83
95
 
84
96
  attr_reader \
85
97
  :health_metrics,
98
+ :settings,
99
+ :agent_settings,
86
100
  :logger,
87
101
  :remote,
88
102
  :profiler,
@@ -93,17 +107,21 @@ module Datadog
93
107
  :error_tracking,
94
108
  :dynamic_instrumentation,
95
109
  :appsec,
96
- :agent_info
110
+ :agent_info,
111
+ :data_streams,
112
+ :open_feature
97
113
 
98
114
  def initialize(settings)
115
+ @settings = settings
99
116
  @logger = self.class.build_logger(settings)
100
117
  @environment_logger_extra = {}
118
+ StableConfig.log_result(@logger)
101
119
  Deprecations.log_deprecations_from_all_sources(@logger)
102
120
 
103
121
  # This agent_settings is intended for use within Core. If you require
104
122
  # agent_settings within a product outside of core you should extend
105
123
  # the Core resolver from within your product/component's namespace.
106
- agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
124
+ @agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
107
125
 
108
126
  # Exposes agent capability information for detection by any components
109
127
  @agent_info = Core::Environment::AgentInfo.new(agent_settings, logger: @logger)
@@ -111,7 +129,7 @@ module Datadog
111
129
  @telemetry = self.class.build_telemetry(settings, agent_settings, @logger)
112
130
 
113
131
  @remote = Remote::Component.build(settings, agent_settings, logger: @logger, telemetry: telemetry)
114
- @tracer = self.class.build_tracer(settings, agent_settings, logger: @logger)
132
+ @tracer = Datadog::Tracing::Component.build_tracer(settings, agent_settings, logger: @logger)
115
133
  @crashtracker = self.class.build_crashtracker(settings, agent_settings, logger: @logger)
116
134
 
117
135
  @profiler, profiler_logger_extra = Datadog::Profiling::Component.build_profiler_component(
@@ -125,16 +143,27 @@ module Datadog
125
143
  @runtime_metrics = self.class.build_runtime_metrics_worker(settings, @logger, telemetry)
126
144
  @health_metrics = self.class.build_health_metrics(settings, @logger, telemetry)
127
145
  @appsec = Datadog::AppSec::Component.build_appsec_component(settings, telemetry: telemetry)
146
+ @open_feature = OpenFeature::Component.build(settings, agent_settings, logger: @logger, telemetry: telemetry)
128
147
  @dynamic_instrumentation = Datadog::DI::Component.build(settings, agent_settings, @logger, telemetry: telemetry)
129
148
  @error_tracking = Datadog::ErrorTracking::Component.build(settings, @tracer, @logger)
149
+ @data_streams = self.class.build_data_streams(settings, agent_settings, @logger)
130
150
  @environment_logger_extra[:dynamic_instrumentation_enabled] = !!@dynamic_instrumentation
131
151
 
132
- self.class.configure_tracing(settings)
152
+ # Configure non-privileged components.
153
+ Datadog::Tracing::Contrib::Component.configure(settings)
154
+ end
155
+
156
+ # Hot-swaps with a new sampler.
157
+ # This operation acquires the Components lock to ensure
158
+ # there is no concurrent modification of the sampler.
159
+ def reconfigure_sampler(settings = Datadog.configuration)
160
+ sampler = Datadog::Tracing::Component.build_sampler(settings)
161
+ Datadog.send(:safely_synchronize) { tracer.sampler.sampler = sampler }
133
162
  end
134
163
 
135
164
  # Starts up components
136
165
  def startup!(settings, old_state: nil)
137
- telemetry.start(old_state&.telemetry_enabled?)
166
+ telemetry.start(old_state&.telemetry_enabled?, components: self)
138
167
 
139
168
  if settings.profiling.enabled
140
169
  if profiler
@@ -174,6 +203,9 @@ module Datadog
174
203
  # Shutdown DI after remote, since remote config triggers DI operations.
175
204
  dynamic_instrumentation&.shutdown!
176
205
 
206
+ # Shutdown OpenFeature component
207
+ open_feature&.shutdown!
208
+
177
209
  # Decommission AppSec
178
210
  appsec&.shutdown!
179
211
 
@@ -187,6 +219,9 @@ module Datadog
187
219
  # Shutdown workers
188
220
  runtime_metrics.stop(true, close_metrics: false)
189
221
 
222
+ # Shutdown Data Streams Monitoring processor
223
+ data_streams&.stop(true)
224
+
190
225
  # Shutdown the old metrics, unless they are still being used.
191
226
  # (e.g. custom Statsd instances.)
192
227
  #
@@ -57,7 +57,7 @@ module Datadog
57
57
  # Until we've correctly implemented support for datadog-ci-rb, we disable config inversion if ci is enabled.
58
58
  if !defined?(::Datadog::CI) &&
59
59
  (name.start_with?('DD_', 'OTEL_') || @alias_to_canonical[name]) &&
60
- !@supported_configurations[name]
60
+ !@supported_configurations.include?(name)
61
61
  if defined?(@raise_on_unknown_env_var) && @raise_on_unknown_env_var # Only enabled for tests!
62
62
  if @alias_to_canonical[name]
63
63
  raise "Please use #{@alias_to_canonical[name]} instead of #{name}. See docs/AccessEnvironmentVariables.md for details."
@@ -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
@@ -828,6 +829,7 @@ module Datadog
828
829
 
829
830
  # Overrides agentless telemetry URL. To be used internally for testing purposes only.
830
831
  #
832
+ # @default `DD_TELEMETRY_AGENTLESS_URL` environment variable, otherwise `nil`.
831
833
  # @return [String]
832
834
  # @!visibility private
833
835
  option :agentless_url_override do |o|
@@ -1003,6 +1005,16 @@ module Datadog
1003
1005
  end
1004
1006
  end
1005
1007
 
1008
+ # Enable experimental process tags propagation such that payloads like spans contain the process tag.
1009
+ #
1010
+ # @default `DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED` environment variable, otherwise `false`
1011
+ # @return [Boolean]
1012
+ option :experimental_propagate_process_tags_enabled do |o|
1013
+ o.env 'DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED'
1014
+ o.default false
1015
+ o.type :bool
1016
+ end
1017
+
1006
1018
  # Tracer specific configuration starting with APM (e.g. DD_APM_TRACING_ENABLED).
1007
1019
  # @public_api
1008
1020
  settings :apm do
@@ -1030,6 +1042,8 @@ module Datadog
1030
1042
  # TODO: Tracing should manage its own settings.
1031
1043
  # Keep this extension here for now to keep things working.
1032
1044
  extend Datadog::Tracing::Configuration::Settings
1045
+
1046
+ extend Datadog::OpenTelemetry::Configuration::Settings
1033
1047
  end
1034
1048
  # standard:enable Metrics/BlockLength
1035
1049
  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