ddtrace 0.42.0 → 0.54.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 (602) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +7 -1
  4. data/CHANGELOG.md +1645 -370
  5. data/CONTRIBUTING.md +2 -6
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +21 -39
  10. data/docs/DevelopmentGuide.md +46 -8
  11. data/docs/GettingStarted.md +439 -92
  12. data/docs/ProfilingDevelopment.md +107 -0
  13. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +86 -0
  14. data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
  15. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +52 -0
  16. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
  17. data/ext/ddtrace_profiling_native_extension/extconf.rb +197 -0
  18. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +35 -0
  19. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
  20. data/ext/ddtrace_profiling_native_extension/profiling.c +22 -0
  21. data/lib/datadog/ci/configuration/components.rb +31 -0
  22. data/lib/datadog/ci/configuration/settings.rb +37 -0
  23. data/lib/datadog/ci/context_flush.rb +29 -0
  24. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
  25. data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
  26. data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -0
  27. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
  28. data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
  29. data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
  30. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
  31. data/lib/datadog/ci/contrib/rspec/example.rb +75 -0
  32. data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
  33. data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
  34. data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
  35. data/lib/datadog/ci/ext/app_types.rb +10 -0
  36. data/lib/datadog/ci/ext/environment.rb +485 -0
  37. data/lib/datadog/ci/ext/settings.rb +11 -0
  38. data/lib/datadog/ci/ext/test.rb +36 -0
  39. data/lib/datadog/ci/extensions.rb +18 -0
  40. data/lib/datadog/ci/test.rb +81 -0
  41. data/lib/datadog/ci.rb +17 -0
  42. data/lib/datadog/contrib.rb +71 -0
  43. data/lib/datadog/core/environment/cgroup.rb +52 -0
  44. data/lib/datadog/core/environment/class_count.rb +20 -0
  45. data/lib/datadog/core/environment/container.rb +91 -0
  46. data/lib/datadog/core/environment/ext.rb +27 -0
  47. data/lib/datadog/core/environment/gc.rb +19 -0
  48. data/lib/datadog/core/environment/identity.rb +51 -0
  49. data/lib/datadog/core/environment/socket.rb +17 -0
  50. data/lib/datadog/core/environment/thread_count.rb +19 -0
  51. data/lib/datadog/core/environment/variable_helpers.rb +42 -0
  52. data/lib/datadog/core/environment/vm_cache.rb +46 -0
  53. data/lib/ddtrace/analytics.rb +3 -0
  54. data/lib/ddtrace/auto_instrument.rb +5 -0
  55. data/lib/ddtrace/auto_instrument_base.rb +7 -0
  56. data/lib/ddtrace/buffer.rb +38 -24
  57. data/lib/ddtrace/chunker.rb +1 -0
  58. data/lib/ddtrace/configuration/agent_settings_resolver.rb +309 -0
  59. data/lib/ddtrace/configuration/base.rb +9 -11
  60. data/lib/ddtrace/configuration/components.rb +167 -26
  61. data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
  62. data/lib/ddtrace/configuration/option.rb +1 -0
  63. data/lib/ddtrace/configuration/option_definition.rb +2 -3
  64. data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
  65. data/lib/ddtrace/configuration/option_set.rb +1 -0
  66. data/lib/ddtrace/configuration/options.rb +7 -9
  67. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  68. data/lib/ddtrace/configuration/settings.rb +142 -12
  69. data/lib/ddtrace/configuration.rb +132 -24
  70. data/lib/ddtrace/context.rb +51 -22
  71. data/lib/ddtrace/context_flush.rb +15 -2
  72. data/lib/ddtrace/context_provider.rb +13 -2
  73. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
  74. data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
  75. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
  76. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
  77. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
  78. data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
  79. data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
  80. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +47 -0
  81. data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
  82. data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
  83. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
  84. data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
  85. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
  86. data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
  87. data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
  88. data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
  89. data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
  90. data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -0
  91. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
  92. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
  93. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
  94. data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
  95. data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
  96. data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
  97. data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
  98. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
  99. data/lib/ddtrace/contrib/action_view/event.rb +4 -7
  100. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
  101. data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
  102. data/lib/ddtrace/contrib/action_view/events.rb +1 -0
  103. data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
  104. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  105. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  106. data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
  107. data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
  108. data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
  109. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +33 -0
  110. data/lib/ddtrace/contrib/active_job/event.rb +54 -0
  111. data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
  112. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
  113. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
  114. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
  115. data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
  116. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
  117. data/lib/ddtrace/contrib/active_job/events.rb +39 -0
  118. data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
  119. data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
  120. data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
  121. data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
  122. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
  123. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
  124. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
  125. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
  126. data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
  127. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
  128. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
  129. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
  130. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
  131. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
  132. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
  133. data/lib/ddtrace/contrib/active_record/event.rb +3 -2
  134. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
  135. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
  136. data/lib/ddtrace/contrib/active_record/events.rb +1 -0
  137. data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
  138. data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
  139. data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
  140. data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
  141. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
  142. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
  143. data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
  144. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
  145. data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
  146. data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
  147. data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
  148. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
  149. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
  150. data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
  151. data/lib/ddtrace/contrib/analytics.rb +1 -0
  152. data/lib/ddtrace/contrib/auto_instrument.rb +48 -0
  153. data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
  154. data/lib/ddtrace/contrib/aws/ext.rb +1 -0
  155. data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
  156. data/lib/ddtrace/contrib/aws/integration.rb +1 -0
  157. data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
  158. data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
  159. data/lib/ddtrace/contrib/aws/services.rb +4 -0
  160. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  161. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
  162. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  163. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
  164. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
  165. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
  166. data/lib/ddtrace/contrib/configurable.rb +65 -38
  167. data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
  168. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
  169. data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
  170. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
  171. data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
  172. data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
  173. data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
  174. data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
  175. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
  176. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
  177. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
  178. data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
  179. data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
  180. data/lib/ddtrace/contrib/delayed_job/plugin.rb +5 -3
  181. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
  182. data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
  183. data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
  184. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
  185. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
  186. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  187. data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
  188. data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
  189. data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
  190. data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
  191. data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
  192. data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
  193. data/lib/ddtrace/contrib/excon/ext.rb +1 -0
  194. data/lib/ddtrace/contrib/excon/integration.rb +1 -0
  195. data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
  196. data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
  197. data/lib/ddtrace/contrib/extensions.rb +90 -14
  198. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
  199. data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
  200. data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
  201. data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
  202. data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
  203. data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
  204. data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
  205. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  206. data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
  207. data/lib/ddtrace/contrib/grape/ext.rb +2 -0
  208. data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
  209. data/lib/ddtrace/contrib/grape/integration.rb +1 -0
  210. data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
  211. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
  212. data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
  213. data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
  214. data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
  215. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
  216. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
  217. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
  218. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
  219. data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
  220. data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
  221. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
  222. data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
  223. data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
  224. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  225. data/lib/ddtrace/contrib/http/ext.rb +1 -0
  226. data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
  227. data/lib/ddtrace/contrib/http/integration.rb +1 -0
  228. data/lib/ddtrace/contrib/http/patcher.rb +2 -1
  229. data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
  230. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
  231. data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
  232. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
  233. data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
  234. data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
  235. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
  236. data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
  237. data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
  238. data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
  239. data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
  240. data/lib/ddtrace/contrib/integration.rb +4 -3
  241. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
  242. data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
  243. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
  244. data/lib/ddtrace/contrib/kafka/event.rb +4 -3
  245. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
  246. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
  247. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
  248. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  249. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  250. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  251. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  252. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  253. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  254. data/lib/ddtrace/contrib/kafka/events.rb +1 -0
  255. data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
  256. data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
  257. data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
  258. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
  259. data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
  260. data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
  261. data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
  262. data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
  263. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
  264. data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
  265. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +6 -3
  266. data/lib/ddtrace/contrib/mongodb/integration.rb +6 -0
  267. data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
  268. data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
  269. data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
  270. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
  271. data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
  272. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
  273. data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
  274. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
  275. data/lib/ddtrace/contrib/patchable.rb +21 -9
  276. data/lib/ddtrace/contrib/patcher.rb +12 -8
  277. data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
  278. data/lib/ddtrace/contrib/presto/ext.rb +1 -0
  279. data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
  280. data/lib/ddtrace/contrib/presto/integration.rb +1 -0
  281. data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
  282. data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
  283. data/lib/ddtrace/contrib/qless/ext.rb +21 -0
  284. data/lib/ddtrace/contrib/qless/integration.rb +39 -0
  285. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  286. data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
  287. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
  288. data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
  289. data/lib/ddtrace/contrib/que/ext.rb +20 -19
  290. data/lib/ddtrace/contrib/que/integration.rb +1 -0
  291. data/lib/ddtrace/contrib/que/patcher.rb +1 -0
  292. data/lib/ddtrace/contrib/que/tracer.rb +4 -2
  293. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
  294. data/lib/ddtrace/contrib/racecar/event.rb +4 -2
  295. data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
  296. data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
  297. data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
  298. data/lib/ddtrace/contrib/racecar/events.rb +1 -0
  299. data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
  300. data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
  301. data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
  302. data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
  303. data/lib/ddtrace/contrib/rack/ext.rb +1 -0
  304. data/lib/ddtrace/contrib/rack/integration.rb +8 -0
  305. data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
  306. data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
  307. data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
  308. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  309. data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
  310. data/lib/ddtrace/contrib/rails/ext.rb +1 -0
  311. data/lib/ddtrace/contrib/rails/framework.rb +50 -2
  312. data/lib/ddtrace/contrib/rails/integration.rb +1 -0
  313. data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
  314. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
  315. data/lib/ddtrace/contrib/rails/patcher.rb +40 -21
  316. data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
  317. data/lib/ddtrace/contrib/rails/utils.rb +5 -0
  318. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
  319. data/lib/ddtrace/contrib/rake/ext.rb +1 -0
  320. data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
  321. data/lib/ddtrace/contrib/rake/integration.rb +2 -1
  322. data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
  323. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
  324. data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
  325. data/lib/ddtrace/contrib/redis/ext.rb +2 -0
  326. data/lib/ddtrace/contrib/redis/instrumentation.rb +90 -0
  327. data/lib/ddtrace/contrib/redis/integration.rb +1 -0
  328. data/lib/ddtrace/contrib/redis/patcher.rb +3 -67
  329. data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
  330. data/lib/ddtrace/contrib/redis/tags.rb +6 -1
  331. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  332. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
  333. data/lib/ddtrace/contrib/registerable.rb +4 -4
  334. data/lib/ddtrace/contrib/registry.rb +3 -2
  335. data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
  336. data/lib/ddtrace/contrib/resque/ext.rb +1 -0
  337. data/lib/ddtrace/contrib/resque/integration.rb +2 -5
  338. data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
  339. data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
  340. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
  341. data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
  342. data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
  343. data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
  344. data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
  345. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
  346. data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
  347. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
  348. data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
  349. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
  350. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
  351. data/lib/ddtrace/contrib/sequel/database.rb +2 -1
  352. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
  353. data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
  354. data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
  355. data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
  356. data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
  357. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
  358. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
  359. data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
  360. data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
  361. data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
  362. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
  363. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
  364. data/lib/ddtrace/contrib/sidekiq/ext.rb +4 -0
  365. data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
  366. data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
  367. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
  368. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
  369. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -0
  370. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
  371. data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
  372. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
  373. data/lib/ddtrace/contrib/sinatra/env.rb +4 -4
  374. data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
  375. data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
  376. data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
  377. data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
  378. data/lib/ddtrace/contrib/sinatra/tracer.rb +28 -7
  379. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
  380. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
  381. data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
  382. data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
  383. data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
  384. data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
  385. data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
  386. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
  387. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
  388. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
  389. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
  390. data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
  391. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
  392. data/lib/ddtrace/correlation.rb +3 -1
  393. data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
  394. data/lib/ddtrace/diagnostics/health.rb +1 -0
  395. data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
  396. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
  397. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
  398. data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
  399. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
  400. data/lib/ddtrace/encoding.rb +3 -0
  401. data/lib/ddtrace/error.rb +78 -8
  402. data/lib/ddtrace/event.rb +1 -0
  403. data/lib/ddtrace/ext/analytics.rb +1 -0
  404. data/lib/ddtrace/ext/app_types.rb +1 -0
  405. data/lib/ddtrace/ext/correlation.rb +1 -0
  406. data/lib/ddtrace/ext/diagnostics.rb +1 -0
  407. data/lib/ddtrace/ext/distributed.rb +9 -2
  408. data/lib/ddtrace/ext/environment.rb +8 -0
  409. data/lib/ddtrace/ext/errors.rb +1 -0
  410. data/lib/ddtrace/ext/forced_tracing.rb +1 -0
  411. data/lib/ddtrace/ext/git.rb +32 -0
  412. data/lib/ddtrace/ext/http.rb +2 -1
  413. data/lib/ddtrace/ext/integration.rb +1 -0
  414. data/lib/ddtrace/ext/manual_tracing.rb +1 -0
  415. data/lib/ddtrace/ext/metrics.rb +1 -0
  416. data/lib/ddtrace/ext/net.rb +1 -0
  417. data/lib/ddtrace/ext/priority.rb +7 -4
  418. data/lib/ddtrace/ext/profiling.rb +53 -0
  419. data/lib/ddtrace/ext/runtime.rb +5 -7
  420. data/lib/ddtrace/ext/sampling.rb +1 -0
  421. data/lib/ddtrace/ext/sql.rb +1 -0
  422. data/lib/ddtrace/ext/test.rb +9 -0
  423. data/lib/ddtrace/ext/transport.rb +14 -0
  424. data/lib/ddtrace/forced_tracing.rb +3 -0
  425. data/lib/ddtrace/logger.rb +2 -1
  426. data/lib/ddtrace/metrics.rb +84 -24
  427. data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
  428. data/lib/ddtrace/opentelemetry/span.rb +1 -0
  429. data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
  430. data/lib/ddtrace/opentracer/carrier.rb +1 -0
  431. data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
  432. data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
  433. data/lib/ddtrace/opentracer/propagator.rb +1 -0
  434. data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
  435. data/lib/ddtrace/opentracer/scope.rb +1 -0
  436. data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
  437. data/lib/ddtrace/opentracer/span.rb +3 -6
  438. data/lib/ddtrace/opentracer/span_context.rb +1 -0
  439. data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
  440. data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
  441. data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
  442. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
  443. data/lib/ddtrace/opentracer/tracer.rb +1 -0
  444. data/lib/ddtrace/opentracer.rb +21 -39
  445. data/lib/ddtrace/patcher.rb +28 -6
  446. data/lib/ddtrace/pin.rb +9 -61
  447. data/lib/ddtrace/pipeline/span_filter.rb +2 -1
  448. data/lib/ddtrace/pipeline/span_processor.rb +1 -0
  449. data/lib/ddtrace/pipeline.rb +1 -0
  450. data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
  451. data/lib/ddtrace/profiling/buffer.rb +42 -0
  452. data/lib/ddtrace/profiling/collectors/stack.rb +297 -0
  453. data/lib/ddtrace/profiling/encoding/profile.rb +46 -0
  454. data/lib/ddtrace/profiling/event.rb +14 -0
  455. data/lib/ddtrace/profiling/events/stack.rb +81 -0
  456. data/lib/ddtrace/profiling/exporter.rb +24 -0
  457. data/lib/ddtrace/profiling/ext/forking.rb +98 -0
  458. data/lib/ddtrace/profiling/flush.rb +44 -0
  459. data/lib/ddtrace/profiling/native_extension.rb +40 -0
  460. data/lib/ddtrace/profiling/pprof/builder.rb +126 -0
  461. data/lib/ddtrace/profiling/pprof/converter.rb +103 -0
  462. data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
  463. data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
  464. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  465. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
  466. data/lib/ddtrace/profiling/pprof/stack_sample.rb +140 -0
  467. data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
  468. data/lib/ddtrace/profiling/pprof/template.rb +119 -0
  469. data/lib/ddtrace/profiling/preload.rb +4 -0
  470. data/lib/ddtrace/profiling/profiler.rb +31 -0
  471. data/lib/ddtrace/profiling/recorder.rb +96 -0
  472. data/lib/ddtrace/profiling/scheduler.rb +150 -0
  473. data/lib/ddtrace/profiling/tasks/setup.rb +90 -0
  474. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +42 -0
  475. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
  476. data/lib/ddtrace/profiling/transport/client.rb +15 -0
  477. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +94 -0
  478. data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
  479. data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
  480. data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
  481. data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
  482. data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
  483. data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
  484. data/lib/ddtrace/profiling/transport/http.rb +111 -0
  485. data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
  486. data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
  487. data/lib/ddtrace/profiling/transport/io.rb +31 -0
  488. data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
  489. data/lib/ddtrace/profiling/transport/request.rb +16 -0
  490. data/lib/ddtrace/profiling/transport/response.rb +9 -0
  491. data/lib/ddtrace/profiling.rb +149 -0
  492. data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
  493. data/lib/ddtrace/propagation/http_propagator.rb +18 -2
  494. data/lib/ddtrace/quantization/hash.rb +1 -0
  495. data/lib/ddtrace/quantization/http.rb +4 -0
  496. data/lib/ddtrace/runtime/metrics.rb +35 -14
  497. data/lib/ddtrace/sampler.rb +20 -9
  498. data/lib/ddtrace/sampling/matcher.rb +1 -0
  499. data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
  500. data/lib/ddtrace/sampling/rule.rb +2 -1
  501. data/lib/ddtrace/sampling/rule_sampler.rb +19 -11
  502. data/lib/ddtrace/sampling.rb +1 -0
  503. data/lib/ddtrace/span.rb +27 -14
  504. data/lib/ddtrace/sync_writer.rb +17 -15
  505. data/lib/ddtrace/tasks/exec.rb +47 -0
  506. data/lib/ddtrace/tasks/help.rb +15 -0
  507. data/lib/ddtrace/tracer.rb +61 -50
  508. data/lib/ddtrace/transport/http/adapters/net.rb +41 -11
  509. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  510. data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
  511. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +26 -16
  512. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  513. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  514. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  515. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  516. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  517. data/lib/ddtrace/transport/http/api.rb +1 -0
  518. data/lib/ddtrace/transport/http/builder.rb +21 -7
  519. data/lib/ddtrace/transport/http/client.rb +3 -1
  520. data/lib/ddtrace/transport/http/env.rb +9 -0
  521. data/lib/ddtrace/transport/http/response.rb +1 -0
  522. data/lib/ddtrace/transport/http/statistics.rb +3 -2
  523. data/lib/ddtrace/transport/http/traces.rb +6 -6
  524. data/lib/ddtrace/transport/http.rb +48 -41
  525. data/lib/ddtrace/transport/io/client.rb +17 -9
  526. data/lib/ddtrace/transport/io/response.rb +2 -3
  527. data/lib/ddtrace/transport/io/traces.rb +10 -1
  528. data/lib/ddtrace/transport/io.rb +2 -1
  529. data/lib/ddtrace/transport/parcel.rb +7 -0
  530. data/lib/ddtrace/transport/request.rb +1 -0
  531. data/lib/ddtrace/transport/response.rb +1 -0
  532. data/lib/ddtrace/transport/statistics.rb +1 -0
  533. data/lib/ddtrace/transport/traces.rb +21 -3
  534. data/lib/ddtrace/utils/compression.rb +28 -0
  535. data/lib/ddtrace/utils/database.rb +1 -0
  536. data/lib/ddtrace/utils/forking.rb +53 -0
  537. data/lib/ddtrace/utils/object_set.rb +40 -0
  538. data/lib/ddtrace/utils/only_once.rb +41 -0
  539. data/lib/ddtrace/utils/sequence.rb +18 -0
  540. data/lib/ddtrace/utils/string_table.rb +46 -0
  541. data/lib/ddtrace/utils/time.rb +40 -3
  542. data/lib/ddtrace/utils.rb +23 -12
  543. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  544. data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
  545. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  546. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
  547. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
  548. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
  549. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
  550. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
  551. data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
  552. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
  553. data/lib/ddtrace/version.rb +16 -3
  554. data/lib/ddtrace/worker.rb +1 -0
  555. data/lib/ddtrace/workers/async.rb +15 -5
  556. data/lib/ddtrace/workers/{loop.rb → interval_loop.rb} +23 -12
  557. data/lib/ddtrace/workers/polling.rb +14 -6
  558. data/lib/ddtrace/workers/queue.rb +3 -1
  559. data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
  560. data/lib/ddtrace/workers/trace_writer.rb +14 -16
  561. data/lib/ddtrace/workers.rb +8 -2
  562. data/lib/ddtrace/writer.rb +33 -8
  563. data/lib/ddtrace.rb +22 -48
  564. metadata +182 -405
  565. data/.circleci/config.yml +0 -548
  566. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  567. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  568. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  569. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  570. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  571. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  572. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  573. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  574. data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
  575. data/.dockerignore +0 -1
  576. data/.env +0 -26
  577. data/.github/CODEOWNERS +0 -1
  578. data/.gitlab-ci.yml +0 -27
  579. data/.rspec +0 -1
  580. data/.rubocop.yml +0 -85
  581. data/.simplecov +0 -38
  582. data/Appraisals +0 -1121
  583. data/Gemfile +0 -7
  584. data/Rakefile +0 -788
  585. data/benchmarks/postgres_database.yml +0 -9
  586. data/benchmarks/sidekiq_test.rb +0 -154
  587. data/docker-compose.yml +0 -370
  588. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  589. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  590. data/lib/ddtrace/augmentation/shim.rb +0 -102
  591. data/lib/ddtrace/augmentation.rb +0 -13
  592. data/lib/ddtrace/environment.rb +0 -41
  593. data/lib/ddtrace/monkey.rb +0 -58
  594. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  595. data/lib/ddtrace/runtime/class_count.rb +0 -17
  596. data/lib/ddtrace/runtime/container.rb +0 -73
  597. data/lib/ddtrace/runtime/gc.rb +0 -16
  598. data/lib/ddtrace/runtime/identity.rb +0 -41
  599. data/lib/ddtrace/runtime/object_space.rb +0 -19
  600. data/lib/ddtrace/runtime/socket.rb +0 -14
  601. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  602. data/tasks/release_gem.rake +0 -28
@@ -0,0 +1,309 @@
1
+ # typed: false
2
+ require 'uri'
3
+
4
+ require 'ddtrace/ext/transport'
5
+ require 'ddtrace/configuration/settings'
6
+
7
+ module Datadog
8
+ module Configuration
9
+ # This class unifies all the different ways that users can configure how we talk to the agent.
10
+ #
11
+ # It has quite a lot of complexity, but this complexity just reflects the actual complexity we have around our
12
+ # configuration today. E.g., this is just all of the complexity regarding agent settings gathered together in a
13
+ # single place. As we deprecate more and more of the different ways that these things can be configured,
14
+ # this class will reflect that simplification as well.
15
+ #
16
+ # Whenever there is a conflict (different configurations are provided in different orders), it MUST warn the users
17
+ # about it and pick a value based on the following priority: code > environment variable > defaults.
18
+ #
19
+ # rubocop:disable Metrics/ClassLength
20
+ class AgentSettingsResolver
21
+ AgentSettings = \
22
+ Struct.new(
23
+ :adapter,
24
+ :ssl,
25
+ :hostname,
26
+ :port,
27
+ :uds_path,
28
+ :timeout_seconds,
29
+ :deprecated_for_removal_transport_configuration_proc,
30
+ :deprecated_for_removal_transport_configuration_options
31
+ ) do
32
+ def initialize(
33
+ adapter:,
34
+ ssl:,
35
+ hostname:,
36
+ port:,
37
+ uds_path:,
38
+ timeout_seconds:,
39
+ deprecated_for_removal_transport_configuration_proc:,
40
+ deprecated_for_removal_transport_configuration_options:
41
+ )
42
+ super(
43
+ adapter,
44
+ ssl,
45
+ hostname,
46
+ port,
47
+ uds_path,
48
+ timeout_seconds,
49
+ deprecated_for_removal_transport_configuration_proc,
50
+ deprecated_for_removal_transport_configuration_options,
51
+ )
52
+ freeze
53
+ end
54
+
55
+ # Returns a frozen copy of this struct
56
+ # with the provided +member_values+ modified.
57
+ def merge(**member_values)
58
+ new_struct = dup
59
+
60
+ member_values.each do |member, value|
61
+ new_struct[member] = value
62
+ end
63
+
64
+ new_struct.freeze
65
+ end
66
+ end
67
+
68
+ def self.call(settings, logger: Datadog.logger)
69
+ new(settings, logger: logger).send(:call)
70
+ end
71
+
72
+ private
73
+
74
+ attr_reader \
75
+ :logger,
76
+ :settings
77
+
78
+ def initialize(settings, logger: Datadog.logger)
79
+ @settings = settings
80
+ @logger = logger
81
+ end
82
+
83
+ def call
84
+ AgentSettings.new(
85
+ adapter: adapter,
86
+ ssl: ssl?,
87
+ hostname: hostname,
88
+ port: port,
89
+ uds_path: uds_path,
90
+ timeout_seconds: timeout_seconds,
91
+ # NOTE: When provided, the deprecated_for_removal_transport_configuration_proc can override all
92
+ # values above (ssl, hostname, port, timeout), or even make them irrelevant (by using an unix socket or
93
+ # enabling test mode instead).
94
+ # That is the main reason why it is deprecated -- it's an opaque function that may set a bunch of settings
95
+ # that we know nothing of until we actually call it.
96
+ deprecated_for_removal_transport_configuration_proc: deprecated_for_removal_transport_configuration_proc,
97
+ deprecated_for_removal_transport_configuration_options: deprecated_for_removal_transport_configuration_options
98
+ )
99
+ end
100
+
101
+ def adapter
102
+ # If no agent settings have been provided, we try to connect using a local unix socket.
103
+ # We only do so if the socket is present when `ddtrace` runs.
104
+ if should_use_uds_fallback?
105
+ Ext::Transport::UnixSocket::ADAPTER
106
+ else
107
+ Ext::Transport::HTTP::ADAPTER
108
+ end
109
+ end
110
+
111
+ def configured_hostname
112
+ return @configured_hostname if defined?(@configured_hostname)
113
+
114
+ @configured_hostname = pick_from(
115
+ DetectedConfiguration.new(
116
+ friendly_name: "'c.tracer.hostname'",
117
+ value: settings.tracer.hostname
118
+ ),
119
+ DetectedConfiguration.new(
120
+ friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
121
+ value: parsed_url && parsed_url.hostname
122
+ ),
123
+ DetectedConfiguration.new(
124
+ friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST} environment variable",
125
+ value: ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST]
126
+ )
127
+ )
128
+ end
129
+
130
+ def configured_port
131
+ return @configured_port if defined?(@configured_port)
132
+
133
+ parsed_port_from_env =
134
+ try_parsing_as_integer(
135
+ friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable",
136
+ value: ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT],
137
+ )
138
+
139
+ parsed_settings_tracer_port =
140
+ try_parsing_as_integer(
141
+ friendly_name: '"c.tracer.port"',
142
+ value: settings.tracer.port,
143
+ )
144
+
145
+ @configured_port = pick_from(
146
+ DetectedConfiguration.new(
147
+ friendly_name: '"c.tracer.port"',
148
+ value: parsed_settings_tracer_port,
149
+ ),
150
+ DetectedConfiguration.new(
151
+ friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} environment variable",
152
+ value: parsed_url && parsed_url.port,
153
+ ),
154
+ DetectedConfiguration.new(
155
+ friendly_name: "#{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT} environment variable",
156
+ value: parsed_port_from_env,
157
+ )
158
+ )
159
+ end
160
+
161
+ def try_parsing_as_integer(value:, friendly_name:)
162
+ return unless value
163
+
164
+ begin
165
+ Integer(value)
166
+ rescue ArgumentError, TypeError
167
+ log_warning("Invalid value for #{friendly_name} (#{value.inspect}). Ignoring this configuration.")
168
+
169
+ nil
170
+ end
171
+ end
172
+
173
+ def ssl?
174
+ !parsed_url.nil? && parsed_url.scheme == 'https'
175
+ end
176
+
177
+ def hostname
178
+ configured_hostname || (should_use_uds_fallback? ? nil : Datadog::Ext::Transport::HTTP::DEFAULT_HOST)
179
+ end
180
+
181
+ def port
182
+ configured_port || (should_use_uds_fallback? ? nil : Datadog::Ext::Transport::HTTP::DEFAULT_PORT)
183
+ end
184
+
185
+ # Unix socket path in the file system
186
+ def uds_path
187
+ uds_fallback
188
+ end
189
+
190
+ # Defaults to +nil+, letting the adapter choose what default
191
+ # works best in their case.
192
+ def timeout_seconds
193
+ nil
194
+ end
195
+
196
+ def deprecated_for_removal_transport_configuration_proc
197
+ settings.tracer.transport_options if settings.tracer.transport_options.is_a?(Proc)
198
+ end
199
+
200
+ def deprecated_for_removal_transport_configuration_options
201
+ options = settings.tracer.transport_options
202
+
203
+ if options.is_a?(Hash) && !options.empty?
204
+ log_warning(
205
+ 'Configuring the tracer via a c.tracer.transport_options hash is deprecated for removal in a future ' \
206
+ "ddtrace version (c.tracer.transport_options contained '#{options.inspect}')."
207
+ )
208
+
209
+ options
210
+ end
211
+ end
212
+
213
+ # We only use the default unix socket if it is already present.
214
+ # This is by design, as we still want to use the default host:port if no unix socket is present.
215
+ def uds_fallback
216
+ return @uds_fallback if defined?(@uds_fallback)
217
+
218
+ @uds_fallback =
219
+ if configured_hostname.nil? &&
220
+ configured_port.nil? &&
221
+ deprecated_for_removal_transport_configuration_proc.nil? &&
222
+ deprecated_for_removal_transport_configuration_options.nil? &&
223
+ File.exist?(Ext::Transport::UnixSocket::DEFAULT_PATH)
224
+
225
+ Ext::Transport::UnixSocket::DEFAULT_PATH
226
+ end
227
+ end
228
+
229
+ def should_use_uds_fallback?
230
+ uds_fallback != nil
231
+ end
232
+
233
+ def parsed_url
234
+ return @parsed_url if defined?(@parsed_url)
235
+
236
+ @parsed_url =
237
+ if unparsed_url_from_env
238
+ parsed = URI.parse(unparsed_url_from_env)
239
+
240
+ if %w[http https].include?(parsed.scheme)
241
+ parsed
242
+ else
243
+ log_warning(
244
+ "Invalid URI scheme '#{parsed.scheme}' for #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL} " \
245
+ "environment variable ('#{unparsed_url_from_env}'). " \
246
+ "Ignoring the contents of #{Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL}."
247
+ )
248
+
249
+ nil
250
+ end
251
+ end
252
+ end
253
+
254
+ # NOTE: This should only be used AFTER parsing, via `#parsed_url`. The only other use-case where this can be used
255
+ # directly without parsing, is when displaying in warning messages, to show users what it actually contains.
256
+ def unparsed_url_from_env
257
+ @unparsed_url_from_env ||= ENV[Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL]
258
+ end
259
+
260
+ def pick_from(*configurations_in_priority_order)
261
+ detected_configurations_in_priority_order = configurations_in_priority_order.select(&:value?)
262
+
263
+ if detected_configurations_in_priority_order.any?
264
+ warn_if_configuration_mismatch(detected_configurations_in_priority_order)
265
+
266
+ # The configurations are listed in priority, so we only need to look at the first; if there's more than
267
+ # one, we emit a warning above
268
+ detected_configurations_in_priority_order.first.value
269
+ end
270
+ end
271
+
272
+ def warn_if_configuration_mismatch(detected_configurations_in_priority_order)
273
+ return unless detected_configurations_in_priority_order.map(&:value).uniq.size > 1
274
+
275
+ log_warning(
276
+ 'Configuration mismatch: values differ between ' \
277
+ "#{detected_configurations_in_priority_order
278
+ .map { |config| "#{config.friendly_name} (#{config.value.inspect})" }.join(' and ')}" \
279
+ ". Using #{detected_configurations_in_priority_order.first.value.inspect}."
280
+ )
281
+ end
282
+
283
+ def log_warning(message)
284
+ logger.warn(message) if logger
285
+ end
286
+
287
+ DetectedConfiguration = Struct.new(:friendly_name, :value) do
288
+ def initialize(friendly_name:, value:)
289
+ super(friendly_name, value)
290
+ freeze
291
+ end
292
+
293
+ def value?
294
+ !value.nil?
295
+ end
296
+ end
297
+ private_constant :DetectedConfiguration
298
+
299
+ # NOTE: Due to... legacy reasons... Some classes like having an `AgentSettings` instance to fall back to.
300
+ # Because we generate this instance with an empty instance of `Settings`, the resulting `AgentSettings` below
301
+ # represents only settings specified via environment variables + the usual defaults.
302
+ #
303
+ # YOU DO NOT WANT TO USE THE BELOW INSTANCE ON ANY NEWLY WRITTEN CODE, as it ignores any settings specified
304
+ # by users via `Datadog.configure`.
305
+ ENVIRONMENT_AGENT_SETTINGS = call(Settings.new, logger: nil)
306
+ end
307
+ # rubocop:enable Metrics/ClassLength
308
+ end
309
+ end
@@ -1,4 +1,5 @@
1
- require 'ddtrace/environment'
1
+ # typed: false
2
+ require 'datadog/core/environment/variable_helpers'
2
3
  require 'ddtrace/configuration/options'
3
4
 
4
5
  module Datadog
@@ -6,12 +7,12 @@ module Datadog
6
7
  # Basic configuration behavior
7
8
  module Base
8
9
  def self.included(base)
9
- base.send(:extend, Datadog::Environment::Helpers)
10
- base.send(:include, Datadog::Environment::Helpers)
11
- base.send(:include, Options)
10
+ base.extend(Datadog::Core::Environment::VariableHelpers)
11
+ base.include(Datadog::Core::Environment::VariableHelpers)
12
+ base.include(Options)
12
13
 
13
- base.send(:extend, ClassMethods)
14
- base.send(:include, InstanceMethods)
14
+ base.extend(ClassMethods)
15
+ base.include(InstanceMethods)
15
16
  end
16
17
 
17
18
  # Class methods for configuration
@@ -37,7 +38,7 @@ module Datadog
37
38
 
38
39
  def new_settings_class(&block)
39
40
  Class.new { include Datadog::Configuration::Base }.tap do |klass|
40
- klass.instance_eval(&block) if block_given?
41
+ klass.instance_eval(&block) if block
41
42
  end
42
43
  end
43
44
  end
@@ -53,10 +54,7 @@ module Datadog
53
54
  ordering = self.class.options.dependency_order
54
55
  sorted_opts = opts.sort_by do |name, _value|
55
56
  ordering.index(name) || (ordering.length + 1)
56
- end
57
-
58
- # Ruby 2.0 doesn't support Array#to_h
59
- sorted_opts = Hash[*sorted_opts.flatten]
57
+ end.to_h
60
58
 
61
59
  # Apply options in sort order
62
60
  sorted_opts.each do |name, value|
@@ -1,13 +1,18 @@
1
+ # typed: true
2
+ require 'ddtrace/configuration/agent_settings_resolver'
1
3
  require 'ddtrace/diagnostics/health'
2
4
  require 'ddtrace/logger'
5
+ require 'ddtrace/profiling'
3
6
  require 'ddtrace/runtime/metrics'
4
7
  require 'ddtrace/tracer'
8
+ require 'ddtrace/sync_writer'
5
9
  require 'ddtrace/workers/runtime_metrics'
6
10
 
7
11
  module Datadog
8
12
  module Configuration
9
13
  # Global components for the trace library.
10
- # rubocop:disable Metrics/LineLength
14
+ # rubocop:disable Metrics/ClassLength
15
+ # rubocop:disable Layout/LineLength
11
16
  class Components
12
17
  class << self
13
18
  def build_health_metrics(settings)
@@ -15,11 +20,11 @@ module Datadog
15
20
  options = { enabled: settings.enabled }
16
21
  options[:statsd] = settings.statsd unless settings.statsd.nil?
17
22
 
18
- Datadog::Diagnostics::Health::Metrics.new(options)
23
+ Datadog::Diagnostics::Health::Metrics.new(**options)
19
24
  end
20
25
 
21
26
  def build_logger(settings)
22
- logger = settings.logger.instance || Datadog::Logger.new(STDOUT)
27
+ logger = settings.logger.instance || Datadog::Logger.new($stdout)
23
28
  logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
24
29
 
25
30
  logger
@@ -30,7 +35,7 @@ module Datadog
30
35
  options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
31
36
  options[:services] = [settings.service] unless settings.service.nil?
32
37
 
33
- Datadog::Runtime::Metrics.new(options)
38
+ Datadog::Runtime::Metrics.new(**options)
34
39
  end
35
40
 
36
41
  def build_runtime_metrics_worker(settings)
@@ -43,7 +48,7 @@ module Datadog
43
48
  Datadog::Workers::RuntimeMetrics.new(options)
44
49
  end
45
50
 
46
- def build_tracer(settings)
51
+ def build_tracer(settings, agent_settings)
47
52
  # If a custom tracer has been provided, use it instead.
48
53
  # Ignore all other options (they should already be configured.)
49
54
  tracer = settings.tracer.instance
@@ -53,7 +58,14 @@ module Datadog
53
58
  default_service: settings.service,
54
59
  enabled: settings.tracer.enabled,
55
60
  partial_flush: settings.tracer.partial_flush.enabled,
56
- tags: build_tracer_tags(settings)
61
+ tags: build_tracer_tags(settings),
62
+ sampler: PrioritySampler.new(
63
+ base_sampler: AllSampler.new,
64
+ post_sampler: Sampling::RuleSampler.new(
65
+ rate_limit: settings.sampling.rate_limit,
66
+ default_sample_rate: settings.sampling.default_rate
67
+ )
68
+ )
57
69
  )
58
70
 
59
71
  # TODO: We reconfigure the tracer here because it has way too many
@@ -61,40 +73,143 @@ module Datadog
61
73
  # tracer initialization for now. Just reconfigure using the
62
74
  # existing mutable #configure function. Remove when these components
63
75
  # are extracted.
64
- tracer.configure(build_tracer_options(settings))
76
+ tracer.configure(agent_settings: agent_settings, **build_tracer_options(settings, agent_settings))
65
77
 
66
78
  tracer
67
79
  end
68
80
 
81
+ def build_profiler(settings, agent_settings, tracer)
82
+ return unless Datadog::Profiling.supported? && settings.profiling.enabled
83
+
84
+ unless defined?(Datadog::Profiling::Tasks::Setup)
85
+ # In #1545 a user reported a NameError due to this constant being uninitialized
86
+ # I've documented my suspicion on why that happened in
87
+ # https://github.com/DataDog/dd-trace-rb/issues/1545#issuecomment-856049025
88
+ #
89
+ # > Thanks for the info! It seems to feed into my theory: there's two moments in the code where we check if
90
+ # > profiler is "supported": 1) when loading ddtrace (inside preload) and 2) when starting the profile
91
+ # > after Datadog.configure gets run.
92
+ # > The problem is that the code assumes that both checks 1) and 2) will always reach the same conclusion:
93
+ # > either profiler is supported, or profiler is not supported.
94
+ # > In the problematic case, it looks like in your case check 1 decides that profiler is not
95
+ # > supported => doesn't load it, and then check 2 decides that it is => assumes it is loaded and tries to
96
+ # > start it.
97
+ #
98
+ # I was never able to validate if this was the issue or why exactly .supported? would change its mind BUT
99
+ # just in case it happens again, I've left this check which avoids breaking the user's application AND
100
+ # would instead direct them to report it to us instead, so that we can investigate what's wrong.
101
+ #
102
+ # TODO: As of June 2021, most checks in .supported? are related to the google-protobuf gem; so it's
103
+ # very likely that it was the origin of the issue we saw. Thus, if, as planned we end up moving away from
104
+ # protobuf OR enough time has passed and no users saw the issue again, we can remove this check altogether.
105
+ Datadog.logger.error(
106
+ 'Profiling was marked as supported and enabled, but setup task was not loaded properly. ' \
107
+ 'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug'
108
+ )
109
+
110
+ return
111
+ end
112
+
113
+ # Load extensions needed to support some of the Profiling features
114
+ Datadog::Profiling::Tasks::Setup.new.run
115
+
116
+ # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method
117
+
118
+ trace_identifiers_helper = Datadog::Profiling::TraceIdentifiers::Helper.new(
119
+ tracer: tracer,
120
+ endpoint_collection_enabled: settings.profiling.advanced.endpoint.collection.enabled
121
+ )
122
+
123
+ recorder = build_profiler_recorder(settings)
124
+ collectors = build_profiler_collectors(settings, recorder, trace_identifiers_helper)
125
+ exporters = build_profiler_exporters(settings, agent_settings)
126
+ scheduler = build_profiler_scheduler(settings, recorder, exporters)
127
+
128
+ Datadog::Profiler.new(collectors, scheduler)
129
+ end
130
+
69
131
  private
70
132
 
71
133
  def build_tracer_tags(settings)
72
134
  settings.tags.dup.tap do |tags|
73
- tags['env'] = settings.env unless settings.env.nil?
74
- tags['version'] = settings.version unless settings.version.nil?
135
+ tags[Ext::Environment::TAG_ENV] = settings.env unless settings.env.nil?
136
+ tags[Ext::Environment::TAG_VERSION] = settings.version unless settings.version.nil?
137
+ end
138
+ end
139
+
140
+ def build_tracer_options(settings, agent_settings)
141
+ tracer_options = {}.tap do |opts|
142
+ tset = settings.tracer
143
+ opts[:min_spans_before_partial_flush] = tset.partial_flush.min_spans_threshold unless tset.partial_flush.min_spans_threshold.nil?
144
+ opts[:partial_flush] = tset.partial_flush.enabled unless tset.partial_flush.enabled.nil?
145
+ opts[:priority_sampling] = tset.priority_sampling unless tset.priority_sampling.nil?
146
+ opts[:sampler] = tset.sampler unless tset.sampler.nil?
147
+ opts[:writer] = tset.writer unless tset.writer.nil?
148
+ opts[:writer_options] = tset.writer_options if tset.writer.nil?
149
+ end
150
+
151
+ # Apply test mode settings if test mode is activated
152
+ if settings.test_mode.enabled
153
+ build_tracer_test_mode_options(tracer_options, settings, agent_settings)
154
+ else
155
+ tracer_options
75
156
  end
76
157
  end
77
158
 
78
- def build_tracer_options(settings)
79
- settings = settings.tracer
80
-
81
- {}.tap do |opts|
82
- opts[:hostname] = settings.hostname unless settings.hostname.nil?
83
- opts[:min_spans_before_partial_flush] = settings.partial_flush.min_spans_threshold unless settings.partial_flush.min_spans_threshold.nil?
84
- opts[:partial_flush] = settings.partial_flush.enabled unless settings.partial_flush.enabled.nil?
85
- opts[:port] = settings.port unless settings.port.nil?
86
- opts[:priority_sampling] = settings.priority_sampling unless settings.priority_sampling.nil?
87
- opts[:sampler] = settings.sampler unless settings.sampler.nil?
88
- opts[:transport_options] = settings.transport_options
89
- opts[:writer] = settings.writer unless settings.writer.nil?
90
- opts[:writer_options] = settings.writer_options if settings.writer.nil?
159
+ def build_tracer_test_mode_options(tracer_options, settings, agent_settings)
160
+ tracer_options.tap do |opts|
161
+ # Do not sample any spans for tests; all must be preserved.
162
+ opts[:sampler] = Datadog::AllSampler.new
163
+
164
+ # If context flush behavior is provided, use it instead.
165
+ opts[:context_flush] = settings.test_mode.context_flush if settings.test_mode.context_flush
166
+
167
+ # Flush traces synchronously, to guarantee they are written.
168
+ writer_options = settings.test_mode.writer_options || {}
169
+ writer_options[:agent_settings] = agent_settings if agent_settings
170
+ opts[:writer] = Datadog::SyncWriter.new(writer_options)
91
171
  end
92
172
  end
173
+
174
+ def build_profiler_recorder(settings)
175
+ event_classes = [Datadog::Profiling::Events::StackSample]
176
+
177
+ Datadog::Profiling::Recorder.new(event_classes, settings.profiling.advanced.max_events)
178
+ end
179
+
180
+ def build_profiler_collectors(settings, recorder, trace_identifiers_helper)
181
+ [
182
+ Datadog::Profiling::Collectors::Stack.new(
183
+ recorder,
184
+ trace_identifiers_helper: trace_identifiers_helper,
185
+ max_frames: settings.profiling.advanced.max_frames
186
+ # TODO: Provide proc that identifies Datadog worker threads?
187
+ # ignore_thread: settings.profiling.ignore_profiler
188
+ )
189
+ ]
190
+ end
191
+
192
+ def build_profiler_exporters(settings, agent_settings)
193
+ transport =
194
+ settings.profiling.exporter.transport || Datadog::Profiling::Transport::HTTP.default(
195
+ agent_settings: agent_settings,
196
+ site: settings.site,
197
+ api_key: settings.api_key,
198
+ profiling_upload_timeout_seconds: settings.profiling.upload.timeout_seconds
199
+ )
200
+
201
+ [Datadog::Profiling::Exporter.new(transport)]
202
+ end
203
+
204
+ def build_profiler_scheduler(settings, recorder, exporters)
205
+ Datadog::Profiling::Scheduler.new(recorder, exporters)
206
+ end
93
207
  end
94
208
 
95
209
  attr_reader \
96
210
  :health_metrics,
97
211
  :logger,
212
+ :profiler,
98
213
  :runtime_metrics,
99
214
  :tracer
100
215
 
@@ -102,8 +217,13 @@ module Datadog
102
217
  # Logger
103
218
  @logger = self.class.build_logger(settings)
104
219
 
220
+ agent_settings = AgentSettingsResolver.call(settings, logger: @logger)
221
+
105
222
  # Tracer
106
- @tracer = self.class.build_tracer(settings)
223
+ @tracer = self.class.build_tracer(settings, agent_settings)
224
+
225
+ # Profiler
226
+ @profiler = self.class.build_profiler(settings, agent_settings, @tracer)
107
227
 
108
228
  # Runtime metrics
109
229
  @runtime_metrics = self.class.build_runtime_metrics_worker(settings)
@@ -113,7 +233,20 @@ module Datadog
113
233
  end
114
234
 
115
235
  # Starts up components
116
- def startup!(settings); end
236
+ def startup!(settings)
237
+ if settings.profiling.enabled
238
+ if profiler
239
+ @logger.debug('Profiling started')
240
+ profiler.start
241
+ else
242
+ # Display a warning for users who expected profiling to be enabled
243
+ unsupported_reason = Datadog::Profiling.unsupported_reason
244
+ logger.warn("Profiling was requested but is not supported, profiling disabled: #{unsupported_reason}")
245
+ end
246
+ else
247
+ @logger.debug('Profiling is disabled')
248
+ end
249
+ end
117
250
 
118
251
  # Shuts down all the components in use.
119
252
  # If it has another instance to compare to, it will compare
@@ -123,12 +256,20 @@ module Datadog
123
256
  # (e.g. a custom tracer instance passed in.)
124
257
  tracer.shutdown! unless replacement && tracer == replacement.tracer
125
258
 
259
+ # Shutdown old profiler
260
+ profiler.shutdown! unless profiler.nil?
261
+
126
262
  # Shutdown workers
127
- runtime_metrics.enabled = false
128
- runtime_metrics.stop(true)
263
+ runtime_metrics.stop(true, close_metrics: false)
129
264
 
130
265
  # Shutdown the old metrics, unless they are still being used.
131
266
  # (e.g. custom Statsd instances.)
267
+ #
268
+ # TODO: This violates the encapsulation created by Runtime::Metrics and
269
+ # Health::Metrics, by directly manipulating `statsd` and changing
270
+ # it's lifecycle management.
271
+ # If we need to directly have ownership of `statsd` lifecycle, we should
272
+ # have direct ownership of it.
132
273
  old_statsd = [
133
274
  runtime_metrics.metrics.statsd,
134
275
  health_metrics.statsd
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'tsort'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Configuration
3
4
  # Represents an instance of an integration configuration option
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/configuration/option'
2
3
 
3
4
  module Datadog
@@ -60,7 +61,7 @@ module Datadog
60
61
  end
61
62
 
62
63
  def default(value = nil, &block)
63
- @default = block_given? ? block : value
64
+ @default = block || value
64
65
  end
65
66
 
66
67
  def delegate_to(&block)
@@ -71,8 +72,6 @@ module Datadog
71
72
  @helpers[name] = block
72
73
  end
73
74
 
74
- # rubocop:disable Style/TrivialAccessors
75
- # (Rubocop erroneously thinks #lazy == #lazy= )
76
75
  def lazy(value = true)
77
76
  @lazy = value
78
77
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/configuration/dependency_resolver'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Configuration
3
4
  class OptionSet < Hash