ddtrace 1.12.1 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +613 -9
  3. data/LICENSE-3rdparty.csv +1 -1
  4. data/bin/ddprofrb +15 -0
  5. data/bin/ddtracerb +3 -1
  6. data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
  7. data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
  8. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +3 -5
  9. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -3
  10. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +3 -22
  11. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -1
  12. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +338 -108
  13. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  14. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  15. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +22 -14
  16. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +4 -0
  17. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  18. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  19. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +3 -0
  20. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +111 -118
  21. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +11 -4
  22. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +545 -144
  23. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +3 -2
  24. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +68 -17
  25. data/ext/datadog_profiling_native_extension/heap_recorder.c +1047 -0
  26. data/ext/datadog_profiling_native_extension/heap_recorder.h +166 -0
  27. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +6 -0
  28. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +60 -32
  29. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +62 -0
  30. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +42 -0
  31. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +50 -4
  32. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +155 -32
  33. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +16 -0
  34. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +19 -3
  35. data/ext/datadog_profiling_native_extension/ruby_helpers.c +267 -0
  36. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +33 -0
  37. data/ext/datadog_profiling_native_extension/stack_recorder.c +1040 -0
  38. data/ext/datadog_profiling_native_extension/stack_recorder.h +27 -0
  39. data/ext/datadog_profiling_native_extension/time_helpers.c +53 -0
  40. data/ext/datadog_profiling_native_extension/time_helpers.h +26 -0
  41. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  42. data/lib/datadog/appsec/assets/waf_rules/recommended.json +698 -75
  43. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  44. data/lib/datadog/appsec/assets/waf_rules/strict.json +98 -8
  45. data/lib/datadog/appsec/assets.rb +8 -0
  46. data/lib/datadog/appsec/component.rb +21 -2
  47. data/lib/datadog/appsec/configuration/settings.rb +167 -189
  48. data/lib/datadog/appsec/configuration.rb +0 -79
  49. data/lib/datadog/appsec/contrib/auto_instrument.rb +2 -4
  50. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  51. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  52. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  53. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  54. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  55. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  56. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  57. data/lib/datadog/appsec/contrib/devise/tracking.rb +57 -0
  58. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -1
  59. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +6 -2
  60. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +8 -6
  61. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +3 -8
  62. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +3 -6
  63. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +3 -6
  64. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -2
  65. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +77 -27
  66. data/lib/datadog/appsec/contrib/rails/ext.rb +3 -2
  67. data/lib/datadog/appsec/contrib/rails/framework.rb +1 -3
  68. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +3 -2
  69. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -11
  70. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +3 -6
  71. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
  72. data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -3
  73. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +6 -4
  74. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +13 -7
  75. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +3 -6
  76. data/lib/datadog/appsec/event.rb +106 -50
  77. data/lib/datadog/appsec/extensions.rb +1 -130
  78. data/lib/datadog/appsec/monitor/gateway/watcher.rb +3 -3
  79. data/lib/datadog/appsec/monitor/reactive/set_user.rb +3 -6
  80. data/lib/datadog/appsec/processor/actions.rb +49 -0
  81. data/lib/datadog/appsec/processor/rule_loader.rb +60 -0
  82. data/lib/datadog/appsec/processor/rule_merger.rb +22 -2
  83. data/lib/datadog/appsec/processor.rb +35 -7
  84. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  85. data/lib/datadog/appsec/remote.rb +17 -11
  86. data/lib/datadog/appsec/response.rb +82 -4
  87. data/lib/datadog/appsec/sample_rate.rb +21 -0
  88. data/lib/datadog/appsec.rb +3 -4
  89. data/lib/datadog/auto_instrument.rb +3 -0
  90. data/lib/datadog/core/backport.rb +51 -0
  91. data/lib/datadog/core/configuration/agent_settings_resolver.rb +38 -29
  92. data/lib/datadog/core/configuration/base.rb +6 -16
  93. data/lib/datadog/core/configuration/components.rb +20 -7
  94. data/lib/datadog/core/configuration/ext.rb +28 -5
  95. data/lib/datadog/core/configuration/option.rb +271 -21
  96. data/lib/datadog/core/configuration/option_definition.rb +73 -32
  97. data/lib/datadog/core/configuration/options.rb +27 -15
  98. data/lib/datadog/core/configuration/settings.rb +398 -119
  99. data/lib/datadog/core/configuration.rb +24 -4
  100. data/lib/datadog/core/diagnostics/environment_logger.rb +132 -235
  101. data/lib/datadog/core/environment/class_count.rb +6 -6
  102. data/lib/datadog/core/environment/execution.rb +103 -0
  103. data/lib/datadog/core/environment/ext.rb +13 -11
  104. data/lib/datadog/core/environment/git.rb +25 -0
  105. data/lib/datadog/core/environment/identity.rb +18 -48
  106. data/lib/datadog/core/environment/platform.rb +7 -1
  107. data/lib/datadog/core/environment/variable_helpers.rb +0 -69
  108. data/lib/datadog/core/environment/yjit.rb +58 -0
  109. data/lib/datadog/core/error.rb +1 -0
  110. data/lib/datadog/core/git/ext.rb +6 -23
  111. data/lib/datadog/core/logging/ext.rb +3 -1
  112. data/lib/datadog/core/metrics/ext.rb +7 -5
  113. data/lib/datadog/core/remote/client/capabilities.rb +7 -2
  114. data/lib/datadog/core/remote/client.rb +3 -0
  115. data/lib/datadog/core/remote/component.rb +52 -48
  116. data/lib/datadog/core/remote/configuration/content.rb +28 -1
  117. data/lib/datadog/core/remote/configuration/repository.rb +3 -1
  118. data/lib/datadog/core/remote/ext.rb +2 -1
  119. data/lib/datadog/core/remote/negotiation.rb +20 -7
  120. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  121. data/lib/datadog/core/remote/tie.rb +27 -0
  122. data/lib/datadog/core/remote/transport/config.rb +60 -0
  123. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  124. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  125. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  126. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  127. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  128. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  129. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  130. data/lib/datadog/core/remote/transport/http.rb +179 -0
  131. data/lib/datadog/core/{transport → remote/transport}/negotiation.rb +25 -23
  132. data/lib/datadog/core/remote/worker.rb +11 -5
  133. data/lib/datadog/core/runtime/ext.rb +22 -12
  134. data/lib/datadog/core/runtime/metrics.rb +43 -0
  135. data/lib/datadog/core/telemetry/client.rb +28 -10
  136. data/lib/datadog/core/telemetry/emitter.rb +9 -11
  137. data/lib/datadog/core/telemetry/event.rb +250 -44
  138. data/lib/datadog/core/telemetry/ext.rb +8 -1
  139. data/lib/datadog/core/telemetry/heartbeat.rb +3 -7
  140. data/lib/datadog/core/telemetry/http/ext.rb +13 -8
  141. data/lib/datadog/core/telemetry/http/response.rb +4 -0
  142. data/lib/datadog/core/telemetry/http/transport.rb +10 -3
  143. data/lib/datadog/core/telemetry/request.rb +59 -0
  144. data/lib/datadog/core/transport/ext.rb +49 -0
  145. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  146. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  147. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  148. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  149. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  150. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  151. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  152. data/lib/datadog/core/transport/http/env.rb +62 -0
  153. data/lib/datadog/core/transport/http/response.rb +60 -0
  154. data/lib/datadog/core/transport/parcel.rb +22 -0
  155. data/lib/datadog/core/transport/request.rb +17 -0
  156. data/lib/datadog/core/transport/response.rb +64 -0
  157. data/lib/datadog/core/utils/duration.rb +52 -0
  158. data/lib/datadog/core/utils/hash.rb +47 -0
  159. data/lib/datadog/core/utils/network.rb +1 -1
  160. data/lib/datadog/core/utils/safe_dup.rb +27 -20
  161. data/lib/datadog/core/utils/url.rb +25 -0
  162. data/lib/datadog/core/utils.rb +1 -1
  163. data/lib/datadog/core/workers/async.rb +3 -2
  164. data/lib/datadog/core/workers/polling.rb +2 -2
  165. data/lib/datadog/kit/appsec/events.rb +139 -89
  166. data/lib/datadog/kit/enable_core_dumps.rb +5 -6
  167. data/lib/datadog/kit/identity.rb +80 -65
  168. data/lib/datadog/opentelemetry/api/context.rb +10 -3
  169. data/lib/datadog/opentelemetry/sdk/propagator.rb +5 -3
  170. data/lib/datadog/opentelemetry/sdk/span_processor.rb +48 -5
  171. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  172. data/lib/datadog/opentelemetry/trace.rb +58 -0
  173. data/lib/datadog/opentelemetry.rb +4 -0
  174. data/lib/datadog/opentracer/text_map_propagator.rb +2 -1
  175. data/lib/datadog/opentracer.rb +9 -0
  176. data/lib/datadog/profiling/collectors/code_provenance.rb +10 -4
  177. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +43 -20
  178. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +3 -1
  179. data/lib/datadog/profiling/collectors/info.rb +101 -0
  180. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  181. data/lib/datadog/profiling/component.rb +248 -97
  182. data/lib/datadog/profiling/exporter.rb +26 -5
  183. data/lib/datadog/profiling/ext.rb +2 -12
  184. data/lib/datadog/profiling/flush.rb +10 -5
  185. data/lib/datadog/profiling/http_transport.rb +23 -6
  186. data/lib/datadog/profiling/load_native_extension.rb +25 -6
  187. data/lib/datadog/profiling/native_extension.rb +1 -22
  188. data/lib/datadog/profiling/profiler.rb +36 -13
  189. data/lib/datadog/profiling/scheduler.rb +20 -15
  190. data/lib/datadog/profiling/stack_recorder.rb +19 -4
  191. data/lib/datadog/profiling/tag_builder.rb +5 -0
  192. data/lib/datadog/profiling/tasks/exec.rb +3 -3
  193. data/lib/datadog/profiling/tasks/help.rb +3 -3
  194. data/lib/datadog/profiling.rb +28 -79
  195. data/lib/datadog/tracing/component.rb +70 -11
  196. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  197. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  198. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  199. data/lib/datadog/tracing/configuration/ext.rb +40 -33
  200. data/lib/datadog/tracing/configuration/http.rb +74 -0
  201. data/lib/datadog/tracing/configuration/settings.rb +136 -99
  202. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -6
  203. data/lib/datadog/tracing/contrib/action_cable/ext.rb +21 -18
  204. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -6
  205. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +1 -1
  206. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +21 -18
  207. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +10 -7
  208. data/lib/datadog/tracing/contrib/action_pack/ext.rb +11 -8
  209. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +10 -6
  210. data/lib/datadog/tracing/contrib/action_view/ext.rb +13 -10
  211. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -7
  212. data/lib/datadog/tracing/contrib/active_job/ext.rb +26 -23
  213. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +1 -1
  214. data/lib/datadog/tracing/contrib/active_job/patcher.rb +1 -1
  215. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -6
  216. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +13 -10
  217. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +29 -15
  218. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +10 -7
  219. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +2 -6
  220. data/lib/datadog/tracing/contrib/active_record/ext.rb +18 -15
  221. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  222. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +106 -202
  223. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +3 -0
  224. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +10 -7
  225. data/lib/datadog/tracing/contrib/active_support/ext.rb +19 -16
  226. data/lib/datadog/tracing/contrib/analytics.rb +0 -1
  227. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +15 -7
  228. data/lib/datadog/tracing/contrib/aws/ext.rb +38 -24
  229. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +16 -5
  230. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  231. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +3 -2
  232. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +14 -14
  233. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +4 -2
  234. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +3 -10
  235. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -1
  236. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +19 -2
  237. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  238. data/lib/datadog/tracing/contrib/configurable.rb +1 -1
  239. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  240. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +21 -7
  241. data/lib/datadog/tracing/contrib/dalli/ext.rb +27 -11
  242. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +17 -8
  243. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -7
  244. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +17 -14
  245. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +15 -7
  246. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +22 -15
  247. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +104 -99
  248. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +17 -9
  249. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +48 -3
  250. data/lib/datadog/tracing/contrib/ethon/ext.rb +20 -11
  251. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +6 -3
  252. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +20 -10
  253. data/lib/datadog/tracing/contrib/excon/ext.rb +17 -8
  254. data/lib/datadog/tracing/contrib/excon/middleware.rb +25 -5
  255. data/lib/datadog/tracing/contrib/ext.rb +26 -1
  256. data/lib/datadog/tracing/contrib/extensions.rb +38 -2
  257. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +27 -10
  258. data/lib/datadog/tracing/contrib/faraday/ext.rb +17 -8
  259. data/lib/datadog/tracing/contrib/faraday/middleware.rb +22 -6
  260. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -6
  261. data/lib/datadog/tracing/contrib/grape/ext.rb +17 -14
  262. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +9 -6
  263. data/lib/datadog/tracing/contrib/graphql/ext.rb +8 -5
  264. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +40 -9
  265. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +39 -20
  266. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +37 -18
  267. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -4
  268. data/lib/datadog/tracing/contrib/grpc/ext.rb +17 -13
  269. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  270. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +3 -2
  271. data/lib/datadog/tracing/contrib/hanami/ext.rb +10 -8
  272. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +5 -8
  273. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +34 -11
  274. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
  275. data/lib/datadog/tracing/contrib/http/ext.rb +17 -9
  276. data/lib/datadog/tracing/contrib/http/instrumentation.rb +27 -7
  277. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +34 -11
  278. data/lib/datadog/tracing/contrib/httpclient/ext.rb +18 -9
  279. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +22 -5
  280. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +34 -11
  281. data/lib/datadog/tracing/contrib/httprb/ext.rb +17 -9
  282. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +22 -5
  283. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -6
  284. data/lib/datadog/tracing/contrib/kafka/ext.rb +43 -39
  285. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +3 -2
  286. data/lib/datadog/tracing/contrib/lograge/ext.rb +3 -1
  287. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -17
  288. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +15 -7
  289. data/lib/datadog/tracing/contrib/mongodb/ext.rb +21 -16
  290. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +16 -5
  291. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +22 -14
  292. data/lib/datadog/tracing/contrib/mysql2/ext.rb +16 -10
  293. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +22 -7
  294. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +53 -0
  295. data/lib/datadog/tracing/contrib/opensearch/ext.rb +38 -0
  296. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  297. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  298. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  299. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +23 -14
  300. data/lib/datadog/tracing/contrib/pg/ext.rb +23 -19
  301. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +49 -9
  302. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +15 -7
  303. data/lib/datadog/tracing/contrib/presto/ext.rb +26 -20
  304. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +14 -5
  305. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +12 -10
  306. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  307. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -8
  308. data/lib/datadog/tracing/contrib/qless/ext.rb +15 -12
  309. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +22 -12
  310. data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
  311. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +10 -7
  312. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -5
  313. data/lib/datadog/tracing/contrib/racecar/ext.rb +21 -18
  314. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +17 -12
  315. data/lib/datadog/tracing/contrib/rack/ext.rb +19 -16
  316. data/lib/datadog/tracing/contrib/rack/header_collection.rb +3 -0
  317. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  318. data/lib/datadog/tracing/contrib/rack/middlewares.rb +16 -50
  319. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -2
  320. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +20 -15
  321. data/lib/datadog/tracing/contrib/rails/ext.rb +8 -5
  322. data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -10
  323. data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -41
  324. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
  325. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -10
  326. data/lib/datadog/tracing/contrib/rake/ext.rb +15 -12
  327. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +18 -9
  328. data/lib/datadog/tracing/contrib/redis/ext.rb +23 -15
  329. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +5 -40
  330. data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
  331. data/lib/datadog/tracing/contrib/redis/tags.rb +16 -7
  332. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +46 -33
  333. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -7
  334. data/lib/datadog/tracing/contrib/resque/ext.rb +10 -7
  335. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +17 -9
  336. data/lib/datadog/tracing/contrib/rest_client/ext.rb +16 -8
  337. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +25 -5
  338. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +10 -6
  339. data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
  340. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +3 -2
  341. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +3 -1
  342. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +4 -20
  343. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -6
  344. data/lib/datadog/tracing/contrib/sequel/ext.rb +11 -8
  345. data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -7
  346. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -8
  347. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +15 -12
  348. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
  349. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +33 -30
  350. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +12 -9
  351. data/lib/datadog/tracing/contrib/sinatra/env.rb +0 -17
  352. data/lib/datadog/tracing/contrib/sinatra/ext.rb +22 -19
  353. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -14
  354. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +15 -8
  355. data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -0
  356. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
  357. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +74 -10
  358. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +10 -6
  359. data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
  360. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -6
  361. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +16 -13
  362. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  363. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  364. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  365. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  366. data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/trilogy}/patcher.rb +10 -6
  367. data/lib/datadog/tracing/contrib/utils/database.rb +5 -3
  368. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +11 -11
  369. data/lib/datadog/tracing/contrib.rb +2 -0
  370. data/lib/datadog/tracing/correlation.rb +29 -12
  371. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  372. data/lib/datadog/tracing/diagnostics/ext.rb +21 -19
  373. data/lib/datadog/tracing/distributed/b3_multi.rb +2 -2
  374. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  375. data/lib/datadog/tracing/distributed/datadog.rb +0 -1
  376. data/lib/datadog/tracing/distributed/propagation.rb +35 -34
  377. data/lib/datadog/tracing/distributed/trace_context.rb +52 -17
  378. data/lib/datadog/tracing/metadata/ext.rb +9 -6
  379. data/lib/datadog/tracing/metadata/tagging.rb +3 -3
  380. data/lib/datadog/tracing/remote.rb +78 -0
  381. data/lib/datadog/tracing/sampling/matcher.rb +23 -3
  382. data/lib/datadog/tracing/sampling/rule.rb +7 -2
  383. data/lib/datadog/tracing/sampling/rule_sampler.rb +31 -0
  384. data/lib/datadog/tracing/span_operation.rb +3 -15
  385. data/lib/datadog/tracing/sync_writer.rb +3 -3
  386. data/lib/datadog/tracing/trace_digest.rb +31 -0
  387. data/lib/datadog/tracing/trace_operation.rb +17 -5
  388. data/lib/datadog/tracing/trace_segment.rb +5 -2
  389. data/lib/datadog/tracing/tracer.rb +12 -1
  390. data/lib/datadog/{core → tracing}/transport/http/api/instance.rb +1 -1
  391. data/lib/datadog/{core → tracing}/transport/http/api/spec.rb +1 -1
  392. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  393. data/lib/datadog/{core → tracing}/transport/http/builder.rb +13 -68
  394. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  395. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  396. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  397. data/lib/datadog/tracing/transport/http.rb +125 -0
  398. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  399. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  400. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  401. data/lib/datadog/tracing/transport/io.rb +30 -0
  402. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  403. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  404. data/lib/datadog/tracing/transport/trace_formatter.rb +240 -0
  405. data/lib/datadog/tracing/transport/traces.rb +224 -0
  406. data/lib/datadog/tracing/workers/trace_writer.rb +6 -4
  407. data/lib/datadog/tracing/workers.rb +4 -2
  408. data/lib/datadog/tracing/writer.rb +5 -2
  409. data/lib/datadog/tracing.rb +8 -2
  410. data/lib/ddtrace/transport/ext.rb +22 -14
  411. data/lib/ddtrace/version.rb +9 -12
  412. data/lib/ddtrace.rb +1 -1
  413. metadata +157 -139
  414. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +0 -25
  415. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -110
  416. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +0 -591
  417. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +0 -14
  418. data/ext/ddtrace_profiling_native_extension/time_helpers.c +0 -17
  419. data/ext/ddtrace_profiling_native_extension/time_helpers.h +0 -10
  420. data/lib/datadog/ci/configuration/components.rb +0 -32
  421. data/lib/datadog/ci/configuration/settings.rb +0 -53
  422. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
  423. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -20
  424. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  425. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  426. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -47
  427. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
  428. data/lib/datadog/ci/contrib/rspec/example.rb +0 -68
  429. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -19
  430. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -48
  431. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  432. data/lib/datadog/ci/ext/app_types.rb +0 -9
  433. data/lib/datadog/ci/ext/environment.rb +0 -575
  434. data/lib/datadog/ci/ext/settings.rb +0 -10
  435. data/lib/datadog/ci/ext/test.rb +0 -35
  436. data/lib/datadog/ci/extensions.rb +0 -19
  437. data/lib/datadog/ci/flush.rb +0 -38
  438. data/lib/datadog/ci/test.rb +0 -81
  439. data/lib/datadog/ci.rb +0 -20
  440. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  441. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  442. data/lib/datadog/core/configuration/option_set.rb +0 -10
  443. data/lib/datadog/core/telemetry/collector.rb +0 -231
  444. data/lib/datadog/core/telemetry/v1/app_event.rb +0 -52
  445. data/lib/datadog/core/telemetry/v1/application.rb +0 -92
  446. data/lib/datadog/core/telemetry/v1/configuration.rb +0 -25
  447. data/lib/datadog/core/telemetry/v1/dependency.rb +0 -43
  448. data/lib/datadog/core/telemetry/v1/host.rb +0 -59
  449. data/lib/datadog/core/telemetry/v1/integration.rb +0 -64
  450. data/lib/datadog/core/telemetry/v1/product.rb +0 -36
  451. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +0 -106
  452. data/lib/datadog/core/transport/config.rb +0 -58
  453. data/lib/datadog/core/transport/http/api.rb +0 -57
  454. data/lib/datadog/core/transport/http/client.rb +0 -45
  455. data/lib/datadog/core/transport/http/config.rb +0 -268
  456. data/lib/datadog/core/transport/http/negotiation.rb +0 -144
  457. data/lib/datadog/core/transport/http.rb +0 -169
  458. data/lib/datadog/core/utils/object_set.rb +0 -43
  459. data/lib/datadog/core/utils/string_table.rb +0 -47
  460. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  461. data/lib/datadog/profiling/buffer.rb +0 -43
  462. data/lib/datadog/profiling/collectors/old_stack.rb +0 -301
  463. data/lib/datadog/profiling/encoding/profile.rb +0 -41
  464. data/lib/datadog/profiling/event.rb +0 -15
  465. data/lib/datadog/profiling/events/stack.rb +0 -82
  466. data/lib/datadog/profiling/old_recorder.rb +0 -107
  467. data/lib/datadog/profiling/pprof/builder.rb +0 -125
  468. data/lib/datadog/profiling/pprof/converter.rb +0 -102
  469. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  470. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  471. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  472. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -81
  473. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -139
  474. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  475. data/lib/datadog/profiling/pprof/template.rb +0 -118
  476. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -43
  477. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -45
  478. data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
  479. data/lib/ddtrace/transport/http/adapters/net.rb +0 -168
  480. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  481. data/lib/ddtrace/transport/http/adapters/test.rb +0 -85
  482. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -77
  483. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  484. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  485. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  486. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  487. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  488. data/lib/ddtrace/transport/http/api.rb +0 -39
  489. data/lib/ddtrace/transport/http/builder.rb +0 -176
  490. data/lib/ddtrace/transport/http/client.rb +0 -52
  491. data/lib/ddtrace/transport/http/env.rb +0 -58
  492. data/lib/ddtrace/transport/http/response.rb +0 -58
  493. data/lib/ddtrace/transport/http/statistics.rb +0 -43
  494. data/lib/ddtrace/transport/http/traces.rb +0 -144
  495. data/lib/ddtrace/transport/http.rb +0 -117
  496. data/lib/ddtrace/transport/io/client.rb +0 -85
  497. data/lib/ddtrace/transport/io/response.rb +0 -25
  498. data/lib/ddtrace/transport/io/traces.rb +0 -99
  499. data/lib/ddtrace/transport/io.rb +0 -28
  500. data/lib/ddtrace/transport/parcel.rb +0 -20
  501. data/lib/ddtrace/transport/request.rb +0 -15
  502. data/lib/ddtrace/transport/response.rb +0 -60
  503. data/lib/ddtrace/transport/serializable_trace.rb +0 -122
  504. data/lib/ddtrace/transport/statistics.rb +0 -75
  505. data/lib/ddtrace/transport/trace_formatter.rb +0 -198
  506. data/lib/ddtrace/transport/traces.rb +0 -216
  507. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
  508. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
  509. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
@@ -2,6 +2,7 @@ require 'logger'
2
2
 
3
3
  require_relative 'base'
4
4
  require_relative 'ext'
5
+ require_relative '../environment/execution'
5
6
  require_relative '../environment/ext'
6
7
  require_relative '../runtime/ext'
7
8
  require_relative '../telemetry/ext'
@@ -79,8 +80,8 @@ module Datadog
79
80
  # @default `DD_API_KEY` environment variable, otherwise `nil`
80
81
  # @return [String,nil]
81
82
  option :api_key do |o|
82
- o.default { ENV.fetch(Core::Environment::Ext::ENV_API_KEY, nil) }
83
- o.lazy
83
+ o.type :string, nilable: true
84
+ o.env Core::Environment::Ext::ENV_API_KEY
84
85
  end
85
86
 
86
87
  # Datadog diagnostic settings.
@@ -99,15 +100,15 @@ module Datadog
99
100
  # @default `DD_TRACE_DEBUG` environment variable, otherwise `false`
100
101
  # @return [Boolean]
101
102
  option :debug do |o|
102
- o.default { env_to_bool(Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED, false) }
103
- o.lazy
104
- o.on_set do |enabled|
103
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_DEBUG_ENABLED
104
+ o.default false
105
+ o.type :bool
106
+ o.after_set do |enabled|
105
107
  # Enable rich debug print statements.
106
108
  # We do not need to unnecessarily load 'pp' unless in debugging mode.
107
109
  require 'pp' if enabled
108
110
  end
109
111
  end
110
-
111
112
  # Internal {Datadog::Statsd} metrics collection.
112
113
  #
113
114
  # @public_api
@@ -117,8 +118,9 @@ module Datadog
117
118
  # @default `DD_HEALTH_METRICS_ENABLED` environment variable, otherwise `false`
118
119
  # @return [Boolean]
119
120
  option :enabled do |o|
120
- o.default { env_to_bool(Datadog::Core::Configuration::Ext::Diagnostics::ENV_HEALTH_METRICS_ENABLED, false) }
121
- o.lazy
121
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_HEALTH_METRICS_ENABLED
122
+ o.default false
123
+ o.type :bool
122
124
  end
123
125
 
124
126
  # {Datadog::Statsd} instance to collect health metrics.
@@ -140,11 +142,11 @@ module Datadog
140
142
  # is *not* running in a development environment.
141
143
  #
142
144
  # @default `DD_TRACE_STARTUP_LOGS` environment variable, otherwise `nil`
143
- # @return [Boolean,nil]
145
+ # @return [Boolean, nil]
144
146
  option :enabled do |o|
147
+ o.env Datadog::Core::Configuration::Ext::Diagnostics::ENV_STARTUP_LOGS_ENABLED
145
148
  # Defaults to nil as we want to know when the default value is being used
146
- o.default { env_to_bool(Datadog::Core::Configuration::Ext::Diagnostics::ENV_STARTUP_LOGS_ENABLED, nil) }
147
- o.lazy
149
+ o.type :bool, nilable: true
148
150
  end
149
151
  end
150
152
  end
@@ -158,8 +160,7 @@ module Datadog
158
160
  o.setter { |v| v.to_s if v }
159
161
 
160
162
  # NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
161
- o.default { ENV.fetch(Core::Environment::Ext::ENV_ENVIRONMENT, nil) }
162
- o.lazy
163
+ o.env Core::Environment::Ext::ENV_ENVIRONMENT
163
164
  end
164
165
 
165
166
  # Internal `Datadog.logger` configuration.
@@ -175,7 +176,7 @@ module Datadog
175
176
  #
176
177
  # @return Logger::Severity
177
178
  option :instance do |o|
178
- o.on_set { |value| set_option(:level, value.level) unless value.nil? }
179
+ o.after_set { |value| set_option(:level, value.level) unless value.nil? }
179
180
  end
180
181
 
181
182
  # Log level for `Datadog.logger`.
@@ -194,8 +195,9 @@ module Datadog
194
195
  # @default `DD_PROFILING_ENABLED` environment variable, otherwise `false`
195
196
  # @return [Boolean]
196
197
  option :enabled do |o|
197
- o.default { env_to_bool(Profiling::Ext::ENV_ENABLED, false) }
198
- o.lazy
198
+ o.env Profiling::Ext::ENV_ENABLED
199
+ o.default false
200
+ o.type :bool
199
201
  end
200
202
 
201
203
  # @public_api
@@ -203,21 +205,34 @@ module Datadog
203
205
  option :transport
204
206
  end
205
207
 
208
+ # Can be used to enable/disable collection of allocation profiles.
209
+ #
210
+ # This feature is disabled by default
211
+ #
212
+ # @warn Due to bugs in Ruby we only recommend enabling this feature in
213
+ # Ruby versions 2.x, 3.1.4+, 3.2.3+ and 3.3.0+
214
+ # (more details in {Datadog::Profiling::Component.enable_allocation_profiling?})
215
+ #
216
+ # @default `DD_PROFILING_ALLOCATION_ENABLED` environment variable as a boolean, otherwise `false`
217
+ option :allocation_enabled do |o|
218
+ o.type :bool
219
+ o.deprecated_env 'DD_PROFILING_EXPERIMENTAL_ALLOCATION_ENABLED' # TODO: Remove this for dd-trace-rb 2.0
220
+ o.env 'DD_PROFILING_ALLOCATION_ENABLED'
221
+ o.default false
222
+ end
223
+
206
224
  # @public_api
207
225
  settings :advanced do
208
- # @deprecated This setting is ignored when CPU Profiling 2.0 is in use, and will be removed on dd-trace-rb 2.0.
226
+ # @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
209
227
  #
210
- # This should never be reduced, as it can cause the resulting profiles to become biased.
211
- # The default should be enough for most services, allowing 16 threads to be sampled around 30 times
212
- # per second for a 60 second period.
228
+ # This was used prior to the GA of the new CPU Profiling 2.0 profiler. The CPU Profiling 2.0 profiler does not
229
+ # use or need this setting and thus it doesn't do anything.
213
230
  option :max_events do |o|
214
- o.default 32768
215
- o.on_set do |value|
216
- if value != 32768
231
+ o.after_set do |_, _, precedence|
232
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
217
233
  Datadog.logger.warn(
218
- 'The profiling.advanced.max_events setting has been deprecated for removal. It no longer does ' \
219
- 'anything unless you the `force_enable_legacy_profiler` option is in use. ' \
220
- 'Please remove it from your Datadog.configure block.'
234
+ 'The profiling.advanced.max_events setting has been deprecated for removal and no ' \
235
+ 'longer does anything. Please remove it from your Datadog.configure block.'
221
236
  )
222
237
  end
223
238
  end
@@ -228,8 +243,9 @@ module Datadog
228
243
  #
229
244
  # @default `DD_PROFILING_MAX_FRAMES` environment variable, otherwise 400
230
245
  option :max_frames do |o|
231
- o.default { env_to_int(Profiling::Ext::ENV_MAX_FRAMES, 400) }
232
- o.lazy
246
+ o.type :int
247
+ o.env Profiling::Ext::ENV_MAX_FRAMES
248
+ o.default 400
233
249
  end
234
250
 
235
251
  # @public_api
@@ -241,26 +257,32 @@ module Datadog
241
257
  # @default `DD_PROFILING_ENDPOINT_COLLECTION_ENABLED` environment variable, otherwise `true`
242
258
  # @return [Boolean]
243
259
  option :enabled do |o|
244
- o.default { env_to_bool(Profiling::Ext::ENV_ENDPOINT_COLLECTION_ENABLED, true) }
245
- o.lazy
260
+ o.env Profiling::Ext::ENV_ENDPOINT_COLLECTION_ENABLED
261
+ o.default true
262
+ o.type :bool
246
263
  end
247
264
  end
248
265
  end
249
266
 
250
267
  # Can be used to disable the gathering of names and versions of gems in use by the service, used to power
251
268
  # grouping and categorization of stack traces.
252
- option :code_provenance_enabled, default: true
269
+ option :code_provenance_enabled do |o|
270
+ o.type :bool
271
+ o.default true
272
+ end
253
273
 
254
274
  # @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
255
275
  #
256
276
  # This was added as a temporary support option in case of issues with the new `Profiling::HttpTransport` class
257
277
  # but we're now confident it's working nicely so we've removed the old code path.
258
278
  option :legacy_transport_enabled do |o|
259
- o.on_set do
260
- Datadog.logger.warn(
261
- 'The profiling.advanced.legacy_transport_enabled setting has been deprecated for removal and no ' \
262
- 'longer does anything. Please remove it from your Datadog.configure block.'
263
- )
279
+ o.after_set do |_, _, precedence|
280
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
281
+ Datadog.logger.warn(
282
+ 'The profiling.advanced.legacy_transport_enabled setting has been deprecated for removal and no ' \
283
+ 'longer does anything. Please remove it from your Datadog.configure block.'
284
+ )
285
+ end
264
286
  end
265
287
  end
266
288
 
@@ -269,69 +291,150 @@ module Datadog
269
291
  # This was used prior to the GA of the new CPU Profiling 2.0 profiler. Using CPU Profiling 2.0 is now the
270
292
  # default and this doesn't do anything.
271
293
  option :force_enable_new_profiler do |o|
272
- o.on_set do
273
- Datadog.logger.warn(
274
- 'The profiling.advanced.force_enable_new_profiler setting has been deprecated for removal and no ' \
275
- 'longer does anything. Please remove it from your Datadog.configure block.'
276
- )
294
+ o.after_set do |_, _, precedence|
295
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
296
+ Datadog.logger.warn(
297
+ 'The profiling.advanced.force_enable_new_profiler setting has been deprecated for removal and no ' \
298
+ 'longer does anything. Please remove it from your Datadog.configure block.'
299
+ )
300
+ end
277
301
  end
278
302
  end
279
303
 
280
- # @deprecated Will be removed for dd-trace-rb 2.0.
281
- #
282
- # Forces enabling the *legacy* non-CPU Profiling 2.0 profiler.
283
- # Do not use unless instructed to by support.
304
+ # @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
284
305
  #
285
- # @default `DD_PROFILING_FORCE_ENABLE_LEGACY` environment variable, otherwise `false`
306
+ # This was used prior to the GA of the new CPU Profiling 2.0 profiler. Using CPU Profiling 2.0 is now the
307
+ # default and this doesn't do anything.
286
308
  option :force_enable_legacy_profiler do |o|
287
- o.default { env_to_bool('DD_PROFILING_FORCE_ENABLE_LEGACY', false) }
288
- o.lazy
289
- o.on_set do |value|
290
- if value
309
+ o.after_set do |_, _, precedence|
310
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
291
311
  Datadog.logger.warn(
292
- 'The profiling.advanced.force_enable_legacy_profiler setting has been deprecated for removal. ' \
293
- 'Do not use unless instructed to by support. ' \
294
- 'If you needed to use it due to incompatibilities with the CPU Profiling 2.0 profiler, consider ' \
295
- 'using the profiling.advanced.no_signals_workaround_enabled setting instead. ' \
296
- 'See <https://dtdg.co/ruby-profiler-troubleshooting> for details.'
312
+ 'The profiling.advanced.force_enable_legacy_profiler setting has been deprecated for removal and no ' \
313
+ 'longer does anything. Please remove it from your Datadog.configure block.'
297
314
  )
298
315
  end
299
316
  end
300
317
  end
301
318
 
302
- # Forces enabling of profiling of time/resources spent in Garbage Collection.
319
+ # @deprecated No longer does anything, and will be removed on dd-trace-rb 2.0.
303
320
  #
304
- # Note that setting this to "false" (or not setting it) will not prevent the feature from being
305
- # being automatically enabled in the future.
321
+ # GC profiling is now on by default and controlled by {:gc_enabled}.
322
+ option :force_enable_gc_profiling do |o|
323
+ o.after_set do |_, _, precedence|
324
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
325
+ Datadog.logger.warn(
326
+ 'The profiling.advanced.force_enable_gc_profiling setting has been deprecated for removal and no ' \
327
+ 'longer does anything (the feature is now on by default). ' \
328
+ 'Please remove this setting from your Datadog.configure block.'
329
+ )
330
+ end
331
+ end
332
+ end
333
+
334
+ # Can be used to enable/disable garbage collection profiling.
306
335
  #
307
- # This feature defaults to off for two reasons:
308
- # 1. Currently this feature can add a lot of overhead for GC-heavy workloads.
309
- # 2. Although this feature is safe on Ruby 2.x, on Ruby 3.x it can break in applications that make use of
310
- # Ractors due to two Ruby VM bugs:
311
- # https://bugs.ruby-lang.org/issues/19112 AND https://bugs.ruby-lang.org/issues/18464.
312
- # If you use Ruby 3.x and your application does not use Ractors (or if your Ruby has been patched), the
313
- # feature is fully safe to enable and this toggle can be used to do so.
336
+ # @warn To avoid https://bugs.ruby-lang.org/issues/18464 even when enabled, GC profiling is only started
337
+ # for Ruby versions 2.x, 3.1.4+, 3.2.3+ and 3.3.0+
338
+ # (more details in {Datadog::Profiling::Component.enable_gc_profiling?})
314
339
  #
315
- # We expect the once the above issues are overcome, we'll automatically enable the feature on fixed Ruby
316
- # versions.
340
+ # @warn Due to a VM bug in the Ractor implementation (https://bugs.ruby-lang.org/issues/19112) this feature
341
+ # stops working when Ractors get garbage collected.
317
342
  #
318
- # @default `DD_PROFILING_FORCE_ENABLE_GC` environment variable, otherwise `false`
319
- option :force_enable_gc_profiling do |o|
320
- o.default { env_to_bool('DD_PROFILING_FORCE_ENABLE_GC', false) }
321
- o.lazy
343
+ # @default `DD_PROFILING_GC_ENABLED` environment variable, otherwise `true`
344
+ option :gc_enabled do |o|
345
+ o.type :bool
346
+ o.env 'DD_PROFILING_GC_ENABLED'
347
+ o.default true
322
348
  end
323
349
 
324
350
  # Can be used to enable/disable the Datadog::Profiling.allocation_count feature.
325
351
  #
326
- # This feature is safe and enabled by default on Ruby 2.x, but
327
- # on Ruby 3.x it can break in applications that make use of Ractors due to two Ruby VM bugs:
328
- # https://bugs.ruby-lang.org/issues/19112 AND https://bugs.ruby-lang.org/issues/18464.
352
+ # @deprecated Use {:allocation_enabled} (outside of advanced section) instead.
353
+ option :allocation_counting_enabled do |o|
354
+ o.after_set do |_, _, precedence|
355
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
356
+ Datadog.logger.warn(
357
+ 'The profiling.advanced.allocation_counting_enabled setting has been deprecated for removal and no ' \
358
+ 'longer does anything. Please remove it from your Datadog.configure block. ' \
359
+ 'Allocation counting is now controlled by the profiling.allocation_enabled setting instead.'
360
+ )
361
+ end
362
+ end
363
+ end
364
+
365
+ # @deprecated Use {:allocation_enabled} (outside of advanced section) instead.
366
+ option :experimental_allocation_enabled do |o|
367
+ o.type :bool
368
+ o.default false
369
+ o.after_set do |_, _, precedence|
370
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
371
+ Datadog.logger.warn(
372
+ 'The profiling.advanced.experimental_allocation_enabled setting has been deprecated for removal and ' \
373
+ 'no longer does anything. Please remove it from your Datadog.configure block. ' \
374
+ 'Allocation profiling is now controlled by the profiling.allocation_enabled setting instead.'
375
+ )
376
+ end
377
+ end
378
+ end
379
+
380
+ # Can be used to enable/disable the collection of heap profiles.
381
+ #
382
+ # This feature is alpha and disabled by default
383
+ #
384
+ # @warn To enable heap profiling you are required to also enable allocation profiling.
385
+ #
386
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED` environment variable as a boolean, otherwise `false`
387
+ option :experimental_heap_enabled do |o|
388
+ o.type :bool
389
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED'
390
+ o.default false
391
+ end
392
+
393
+ # Can be used to enable/disable the collection of heap size profiles.
329
394
  #
330
- # If you use Ruby 3.x and your application does not use Ractors (or if your Ruby has been patched), the
331
- # feature is fully safe to enable and this toggle can be used to do so.
395
+ # This feature is alpha and enabled by default when heap profiling is enabled.
332
396
  #
333
- # @default `true` on Ruby 2.x, `false` on Ruby 3.x
334
- option :allocation_counting_enabled, default: RUBY_VERSION.start_with?('2.')
397
+ # @warn To enable heap size profiling you are required to also enable allocation and heap profiling.
398
+ #
399
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED` environment variable as a boolean, otherwise
400
+ # whatever the value of DD_PROFILING_EXPERIMENTAL_HEAP_ENABLED is.
401
+ option :experimental_heap_size_enabled do |o|
402
+ o.type :bool
403
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SIZE_ENABLED'
404
+ o.default true # This gets ANDed with experimental_heap_enabled in the profiler component.
405
+ end
406
+
407
+ # Can be used to configure the allocation sampling rate: a sample will be collected every x allocations.
408
+ #
409
+ # This feature is now controlled via {:overhead_target_percentage}
410
+ option :experimental_allocation_sample_rate do |o|
411
+ o.after_set do |_, _, precedence|
412
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
413
+ Datadog.logger.warn(
414
+ 'The profiling.advanced.experimental_allocation_sample_rate setting has been deprecated for removal ' \
415
+ 'and no longer does anything. Please remove it from your Datadog.configure block. ' \
416
+ 'Allocation sample rate is now handled by a dynamic sampler which will adjust the sampling rate to ' \
417
+ 'keep to the configured `profiling.advanced.overhead_target_percentage`.'
418
+ )
419
+ end
420
+ end
421
+ end
422
+
423
+ # Can be used to configure the heap sampling rate: a heap sample will be collected for every x allocation
424
+ # samples.
425
+ #
426
+ # The lower the value, the more accuracy in heap tracking but the bigger the overhead. In particular, a
427
+ # value of 1 will track ALL allocations samples for heap profiles.
428
+ #
429
+ # The effective heap sampling rate in terms of allocations (not allocation samples) can be calculated via
430
+ # effective_heap_sample_rate = allocation_sample_rate * heap_sample_rate.
431
+ #
432
+ # @default `DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE` environment variable, otherwise `10`.
433
+ option :experimental_heap_sample_rate do |o|
434
+ o.type :int
435
+ o.env 'DD_PROFILING_EXPERIMENTAL_HEAP_SAMPLE_RATE'
436
+ o.default 10
437
+ end
335
438
 
336
439
  # Can be used to disable checking which version of `libmysqlclient` is being used by the `mysql2` gem.
337
440
  #
@@ -339,8 +442,36 @@ module Datadog
339
442
  #
340
443
  # @default `DD_PROFILING_SKIP_MYSQL2_CHECK` environment variable, otherwise `false`
341
444
  option :skip_mysql2_check do |o|
342
- o.default { env_to_bool('DD_PROFILING_SKIP_MYSQL2_CHECK', false) }
343
- o.lazy
445
+ o.type :bool
446
+ o.env 'DD_PROFILING_SKIP_MYSQL2_CHECK'
447
+ o.default false
448
+ end
449
+
450
+ # Enables data collection for the timeline feature. This is still experimental and not recommended yet.
451
+ #
452
+ # @default `DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED` environment variable as a boolean, otherwise `false`
453
+ option :experimental_timeline_enabled do |o|
454
+ o.after_set do |_, _, precedence|
455
+ unless precedence == Datadog::Core::Configuration::Option::Precedence::DEFAULT
456
+ Datadog.logger.warn(
457
+ 'The profiling.advanced.experimental_timeline_enabled setting has been deprecated for removal ' \
458
+ 'and no longer does anything. Please remove it from your Datadog.configure block. ' \
459
+ 'The timeline feature counting is now controlled by the `timeline_enabled` setting instead.'
460
+ )
461
+ end
462
+ end
463
+ end
464
+
465
+ # Controls data collection for the timeline feature.
466
+ #
467
+ # If you needed to disable this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>,
468
+ # so we can fix it!
469
+ #
470
+ # @default `DD_PROFILING_TIMELINE_ENABLED` environment variable as a boolean, otherwise `true`
471
+ option :timeline_enabled do |o|
472
+ o.type :bool
473
+ o.env 'DD_PROFILING_TIMELINE_ENABLED'
474
+ o.default true
344
475
  end
345
476
 
346
477
  # The profiler gathers data by sending `SIGPROF` unix signals to Ruby application threads.
@@ -363,8 +494,42 @@ module Datadog
363
494
  #
364
495
  # @default `DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED` environment variable as a boolean, otherwise `:auto`
365
496
  option :no_signals_workaround_enabled do |o|
366
- o.default { env_to_bool('DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED', :auto) }
367
- o.lazy
497
+ o.env 'DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED'
498
+ o.default :auto
499
+ o.env_parser do |value|
500
+ if value
501
+ value = value.strip.downcase
502
+ ['true', '1'].include?(value)
503
+ end
504
+ end
505
+ end
506
+
507
+ # Configures how much wall-time overhead the profiler targets. The profiler will dynamically adjust the
508
+ # interval between samples it takes so as to try and maintain the property that it spends no longer than
509
+ # this amount of wall-clock time profiling. For example, with the default value of 2%, the profiler will
510
+ # try and cause no more than 1.2 seconds per minute of overhead. Decreasing this value will reduce the
511
+ # accuracy of the data collected. Increasing will impact the application.
512
+ #
513
+ # We do not recommend tweaking this value.
514
+ #
515
+ # This value should be a percentage i.e. a number between 0 and 100, not 0 and 1.
516
+ #
517
+ # @default `DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE` as a float, otherwise 2.0
518
+ option :overhead_target_percentage do |o|
519
+ o.type :float
520
+ o.env 'DD_PROFILING_OVERHEAD_TARGET_PERCENTAGE'
521
+ o.default 2.0
522
+ end
523
+
524
+ # Controls how often the profiler reports data, in seconds. Cannot be lower than 60 seconds.
525
+ #
526
+ # We do not recommend tweaking this value.
527
+ #
528
+ # @default `DD_PROFILING_UPLOAD_PERIOD` environment variable, otherwise 60
529
+ option :upload_period_seconds do |o|
530
+ o.type :int
531
+ o.env 'DD_PROFILING_UPLOAD_PERIOD'
532
+ o.default 60
368
533
  end
369
534
  end
370
535
 
@@ -374,9 +539,9 @@ module Datadog
374
539
  #
375
540
  # @default `DD_PROFILING_UPLOAD_TIMEOUT` environment variable, otherwise `30.0`
376
541
  option :timeout_seconds do |o|
377
- o.setter { |value| value.nil? ? 30.0 : value.to_f }
378
- o.default { env_to_float(Profiling::Ext::ENV_UPLOAD_TIMEOUT, 30.0) }
379
- o.lazy
542
+ o.type :float
543
+ o.env Profiling::Ext::ENV_UPLOAD_TIMEOUT
544
+ o.default 30.0
380
545
  end
381
546
  end
382
547
  end
@@ -389,11 +554,12 @@ module Datadog
389
554
  # @default `DD_RUNTIME_METRICS_ENABLED` environment variable, otherwise `false`
390
555
  # @return [Boolean]
391
556
  option :enabled do |o|
392
- o.default { env_to_bool(Core::Runtime::Ext::Metrics::ENV_ENABLED, false) }
393
- o.lazy
557
+ o.env Core::Runtime::Ext::Metrics::ENV_ENABLED
558
+ o.default false
559
+ o.type :bool
394
560
  end
395
561
 
396
- option :opts, default: ->(_i) { {} }, lazy: true
562
+ option :opts, default: {}, type: :hash
397
563
  option :statsd
398
564
  end
399
565
 
@@ -406,8 +572,8 @@ module Datadog
406
572
  o.setter { |v| v.to_s if v }
407
573
 
408
574
  # NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
409
- o.default { ENV.fetch(Core::Environment::Ext::ENV_SERVICE, Core::Environment::Ext::FALLBACK_SERVICE_NAME) }
410
- o.lazy
575
+ o.env Core::Environment::Ext::ENV_SERVICE
576
+ o.default Core::Environment::Ext::FALLBACK_SERVICE_NAME
411
577
 
412
578
  # There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
413
579
  # nil instead so that one can do
@@ -429,8 +595,8 @@ module Datadog
429
595
  # @default `DD_SITE` environment variable, otherwise `nil` which sends data to `app.datadoghq.com`
430
596
  # @return [String,nil]
431
597
  option :site do |o|
432
- o.default { ENV.fetch(Core::Environment::Ext::ENV_SITE, nil) }
433
- o.lazy
598
+ o.type :string, nilable: true
599
+ o.env Core::Environment::Ext::ENV_SITE
434
600
  end
435
601
 
436
602
  # Default tags
@@ -440,44 +606,57 @@ module Datadog
440
606
  # @default `DD_TAGS` environment variable (in the format `'tag1:value1,tag2:value2'`), otherwise `{}`
441
607
  # @return [Hash<String,String>]
442
608
  option :tags do |o|
443
- o.default do
444
- tags = {}
609
+ o.type :hash, nilable: true
610
+ o.env Core::Environment::Ext::ENV_TAGS
611
+ o.env_parser do |env_value|
612
+ values = if env_value.include?(',')
613
+ env_value.split(',')
614
+ else
615
+ env_value.split(' ') # rubocop:disable Style/RedundantArgument
616
+ end
617
+
618
+ values.map! do |v|
619
+ v.gsub!(/\A[\s,]*|[\s,]*\Z/, '')
620
+
621
+ v.empty? ? nil : v
622
+ end
445
623
 
446
- # Parse tags from environment
447
- env_to_list(Core::Environment::Ext::ENV_TAGS, comma_separated_only: false).each do |tag|
624
+ values.compact!
625
+ values.each_with_object({}) do |tag, tags|
448
626
  key, value = tag.split(':', 2)
449
627
  tags[key] = value if value && !value.empty?
450
628
  end
629
+ end
630
+ o.setter do |new_value, old_value|
631
+ raw_tags = new_value || {}
451
632
 
452
- # Override tags if defined
453
- tags[Core::Environment::Ext::TAG_ENV] = env unless env.nil?
454
- tags[Core::Environment::Ext::TAG_VERSION] = version unless version.nil?
633
+ env_value = env
634
+ version_value = version
635
+ service_name = service_without_fallback
455
636
 
456
- tags
457
- end
637
+ # Override tags if defined
638
+ raw_tags[Core::Environment::Ext::TAG_ENV] = env_value unless env_value.nil?
639
+ raw_tags[Core::Environment::Ext::TAG_VERSION] = version_value unless version_value.nil?
458
640
 
459
- o.setter do |new_value, old_value|
460
641
  # Coerce keys to strings
461
- string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h
642
+ string_tags = raw_tags.collect { |k, v| [k.to_s, v] }.to_h
462
643
 
463
644
  # Cross-populate tag values with other settings
464
- if env.nil? && string_tags.key?(Core::Environment::Ext::TAG_ENV)
645
+ if env_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_ENV)
465
646
  self.env = string_tags[Core::Environment::Ext::TAG_ENV]
466
647
  end
467
648
 
468
- if version.nil? && string_tags.key?(Core::Environment::Ext::TAG_VERSION)
649
+ if version_value.nil? && string_tags.key?(Core::Environment::Ext::TAG_VERSION)
469
650
  self.version = string_tags[Core::Environment::Ext::TAG_VERSION]
470
651
  end
471
652
 
472
- if service_without_fallback.nil? && string_tags.key?(Core::Environment::Ext::TAG_SERVICE)
653
+ if service_name.nil? && string_tags.key?(Core::Environment::Ext::TAG_SERVICE)
473
654
  self.service = string_tags[Core::Environment::Ext::TAG_SERVICE]
474
655
  end
475
656
 
476
657
  # Merge with previous tags
477
658
  (old_value || {}).merge(string_tags)
478
659
  end
479
-
480
- o.lazy
481
660
  end
482
661
 
483
662
  # The time provider used by Datadog. It must respect the interface of [Time](https://ruby-doc.org/core-3.0.1/Time.html).
@@ -490,9 +669,10 @@ module Datadog
490
669
  # @default `->{ Time.now }`
491
670
  # @return [Proc<Time>]
492
671
  option :time_now_provider do |o|
493
- o.default { ::Time.now }
672
+ o.default_proc { ::Time.now }
673
+ o.type :proc
494
674
 
495
- o.on_set do |time_provider|
675
+ o.after_set do |time_provider|
496
676
  Core::Utils::Time.now_provider = time_provider
497
677
  end
498
678
 
@@ -511,21 +691,92 @@ module Datadog
511
691
  # @return [String,nil]
512
692
  option :version do |o|
513
693
  # NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
514
- o.default { ENV.fetch(Core::Environment::Ext::ENV_VERSION, nil) }
515
- o.lazy
694
+ o.type :string, nilable: true
695
+ o.env Core::Environment::Ext::ENV_VERSION
516
696
  end
517
697
 
518
698
  # Client-side telemetry configuration
519
699
  # @public_api
520
700
  settings :telemetry do
701
+ # Whether the bundled Ruby gems as reported through telemetry.
702
+ #
703
+ # @default `DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED` environment variable, otherwise `true`.
704
+ # @return [Boolean]
705
+ option :dependency_collection do |o|
706
+ o.type :bool
707
+ o.env Core::Telemetry::Ext::ENV_DEPENDENCY_COLLECTION
708
+ o.default true
709
+ end
710
+
521
711
  # Enable telemetry collection. This allows telemetry events to be emitted to the telemetry API.
522
712
  #
523
713
  # @default `DD_INSTRUMENTATION_TELEMETRY_ENABLED` environment variable, otherwise `true`.
524
714
  # Can be disabled as documented [here](https://docs.datadoghq.com/tracing/configure_data_security/#telemetry-collection).
715
+ # By default, telemetry is disabled in development environments.
525
716
  # @return [Boolean]
526
717
  option :enabled do |o|
527
- o.default { env_to_bool(Core::Telemetry::Ext::ENV_ENABLED, true) }
528
- o.lazy
718
+ o.env Core::Telemetry::Ext::ENV_ENABLED
719
+ o.default do
720
+ if Datadog::Core::Environment::Execution.development?
721
+ Datadog.logger.debug do
722
+ 'Development environment detected, disabling Telemetry. ' \
723
+ 'You can enable it with DD_INSTRUMENTATION_TELEMETRY_ENABLED=true.'
724
+ end
725
+ false
726
+ else
727
+ true
728
+ end
729
+ end
730
+ o.type :bool
731
+ end
732
+
733
+ # The interval in seconds when telemetry must be sent.
734
+ #
735
+ # This method is used internally, for testing purposes only.
736
+ #
737
+ # @default `DD_TELEMETRY_HEARTBEAT_INTERVAL` environment variable, otherwise `60`.
738
+ # @return [Float]
739
+ # @!visibility private
740
+ option :heartbeat_interval_seconds do |o|
741
+ o.type :float
742
+ o.env Core::Telemetry::Ext::ENV_HEARTBEAT_INTERVAL
743
+ o.default 60.0
744
+ end
745
+
746
+ # The install id of the application.
747
+ #
748
+ # This method is used internally, by library injection.
749
+ #
750
+ # @default `DD_INSTRUMENTATION_INSTALL_ID` environment variable, otherwise `nil`.
751
+ # @return [String,nil]
752
+ # @!visibility private
753
+ option :install_id do |o|
754
+ o.type :string, nilable: true
755
+ o.env Core::Telemetry::Ext::ENV_INSTALL_ID
756
+ end
757
+
758
+ # The install type of the application.
759
+ #
760
+ # This method is used internally, by library injection.
761
+ #
762
+ # @default `DD_INSTRUMENTATION_INSTALL_TYPE` environment variable, otherwise `nil`.
763
+ # @return [String,nil]
764
+ # @!visibility private
765
+ option :install_type do |o|
766
+ o.type :string, nilable: true
767
+ o.env Core::Telemetry::Ext::ENV_INSTALL_TYPE
768
+ end
769
+
770
+ # The install time of the application.
771
+ #
772
+ # This method is used internally, by library injection.
773
+ #
774
+ # @default `DD_INSTRUMENTATION_INSTALL_TIME` environment variable, otherwise `nil`.
775
+ # @return [String,nil]
776
+ # @!visibility private
777
+ option :install_time do |o|
778
+ o.type :string, nilable: true
779
+ o.env Core::Telemetry::Ext::ENV_INSTALL_TIME
529
780
  end
530
781
  end
531
782
 
@@ -535,19 +786,47 @@ module Datadog
535
786
  # Enable remote configuration. This allows fetching of remote configuration for live updates.
536
787
  #
537
788
  # @default `DD_REMOTE_CONFIGURATION_ENABLED` environment variable, otherwise `true`.
789
+ # By default, remote configuration is disabled in development environments.
538
790
  # @return [Boolean]
539
791
  option :enabled do |o|
540
- o.default { env_to_bool(Core::Remote::Ext::ENV_ENABLED, true) }
541
- o.lazy
792
+ o.env Core::Remote::Ext::ENV_ENABLED
793
+ o.default do
794
+ if Datadog::Core::Environment::Execution.development?
795
+ Datadog.logger.debug do
796
+ 'Development environment detected, disabling Remote Configuration. ' \
797
+ 'You can enable it with DD_REMOTE_CONFIGURATION_ENABLED=true.'
798
+ end
799
+ false
800
+ else
801
+ true
802
+ end
803
+ end
804
+ o.type :bool
542
805
  end
543
806
 
544
807
  # Tune remote configuration polling interval.
808
+ # This is a private setting. Do not use outside of Datadog. It might change at any point in time.
545
809
  #
546
- # @default `DD_REMOTE_CONFIGURATION_POLL_INTERVAL_SECONDS` environment variable, otherwise `5.0` seconds.
810
+ # @default `DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS` environment variable, otherwise `5.0` seconds.
547
811
  # @return [Float]
812
+ # @!visibility private
548
813
  option :poll_interval_seconds do |o|
549
- o.default { env_to_float(Core::Remote::Ext::ENV_POLL_INTERVAL_SECONDS, 5.0) }
550
- o.lazy
814
+ o.env Core::Remote::Ext::ENV_POLL_INTERVAL_SECONDS
815
+ o.type :float
816
+ o.default 5.0
817
+ end
818
+
819
+ # Tune remote configuration boot timeout.
820
+ # Early operations such as requests are blocked until RC is ready. In
821
+ # order to not block the application indefinitely a timeout is
822
+ # enforced allowing requests to proceed with the local configuration.
823
+ #
824
+ # @default `DD_REMOTE_CONFIG_BOOT_TIMEOUT` environment variable, otherwise `1.0` seconds.
825
+ # @return [Float]
826
+ option :boot_timeout_seconds do |o|
827
+ o.env Core::Remote::Ext::ENV_BOOT_TIMEOUT_SECONDS
828
+ o.type :float
829
+ o.default 1.0
551
830
  end
552
831
 
553
832
  # Declare service name to bind to remote configuration. Use when