ddtrace 0.40.0 → 0.54.1

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 +1667 -350
  5. data/CONTRIBUTING.md +3 -7
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +21 -37
  10. data/docs/DevelopmentGuide.md +56 -8
  11. data/docs/GettingStarted.md +438 -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 +166 -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 +278 -57
  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 +10 -10
  67. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  68. data/lib/ddtrace/configuration/settings.rb +147 -13
  69. data/lib/ddtrace/configuration.rb +133 -22
  70. data/lib/ddtrace/context.rb +51 -22
  71. data/lib/ddtrace/context_flush.rb +15 -2
  72. data/lib/ddtrace/context_provider.rb +17 -5
  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 +5 -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 +12 -7
  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 +36 -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 +6 -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 +3 -0
  177. data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -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 +40 -16
  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 +6 -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 +15 -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 +6 -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 +14 -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 +6 -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 +73 -35
  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 +6 -1
  217. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -1
  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 +13 -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 +20 -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 +7 -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 +6 -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 +5 -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 +8 -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 +47 -17
  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 +10 -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 +7 -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 +5 -2
  352. data/lib/ddtrace/contrib/sequel/dataset.rb +5 -3
  353. data/lib/ddtrace/contrib/sequel/ext.rb +2 -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 +16 -5
  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 +9 -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 +57 -0
  419. data/lib/ddtrace/ext/runtime.rb +5 -6
  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 +5 -1
  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 +301 -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 +134 -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 +101 -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 +20 -6
  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 +40 -15
  497. data/lib/ddtrace/sampler.rb +22 -11
  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 +174 -36
  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 +72 -62
  508. data/lib/ddtrace/transport/http/adapters/net.rb +48 -12
  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 +17 -3
  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 +28 -5
  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 +29 -14
  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 +32 -5
  557. data/lib/ddtrace/workers/polling.rb +13 -5
  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 +180 -374
  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 -1071
  583. data/Gemfile +0 -7
  584. data/Rakefile +0 -791
  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
@@ -1,14 +1,80 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Configuration
4
- # Resolves a configuration key to a Datadog::Contrib::Configuration:Settings object
5
+ # Resolves an integration-specific matcher to an associated
6
+ # object.
7
+ #
8
+ # Integrations that perform any configuration matching
9
+ # based on patterns might want to override this class
10
+ # to provide richer matching. For example, match configuration
11
+ # based on: HTTP request parameters, request headers,
12
+ # async queue name.
13
+ #
14
+ # When overriding this class, for simple use cases, only
15
+ # overriding `#parse_matcher` might suffice. See
16
+ # `#parse_matcher`'s documentation for more information.
5
17
  class Resolver
6
- def resolve(key)
7
- key
18
+ attr_reader :configurations
19
+
20
+ def initialize
21
+ @configurations = {}
22
+ end
23
+
24
+ # Adds a new `matcher`, associating with it a `value`.
25
+ #
26
+ # This `value` is returned when `#resolve` is called
27
+ # with a matching value for this matcher. When multiple
28
+ # matchers would match, `#resolve` returns the latest
29
+ # added one.
30
+ #
31
+ # The `matcher` can be transformed internally by the
32
+ # `#parse_matcher` method before being stored.
33
+ #
34
+ # The `value` can also be retrieved by calling `#get`
35
+ # with the same `matcher` added by this method.
36
+ #
37
+ # @param [Object] matcher integration-specific matcher
38
+ # @param [Object] value arbitrary value to be associated with `matcher`
39
+ def add(matcher, value)
40
+ @configurations[parse_matcher(matcher)] = value
41
+ end
42
+
43
+ # Retrieves the stored value for a `matcher`
44
+ # previously stored by `#add`.
45
+ #
46
+ # @param [Object] matcher integration-specific matcher
47
+ # @return [Object] previously stored `value` from `#add`, or `nil` if not found
48
+ def get(matcher)
49
+ @configurations[parse_matcher(matcher)]
50
+ end
51
+
52
+ # Matches an arbitrary value against the configured
53
+ # matchers previously set with `#add`.
54
+ #
55
+ # If multiple matchers would match, returns the latest one.
56
+ #
57
+ # @param [Object] value integration-specific value
58
+ # @return [Object] matching `value` configured at `#add`, or `nil` if none match
59
+ def resolve(value)
60
+ @configurations[value]
8
61
  end
9
62
 
10
- def add(key)
11
- key
63
+ protected
64
+
65
+ # Converts `matcher` into an appropriate key
66
+ # for the internal Hash storage.
67
+ #
68
+ # It's recommended to override this method,
69
+ # instead of the public methods, if the
70
+ # integration can simply convert both
71
+ # `matcher` (provided to `#add`) and `value`
72
+ # (provided to `#resolve`) to the same value.
73
+ #
74
+ # @param [Object] matcher integration-specific matcher
75
+ # @return [Object] processed matcher
76
+ def parse_matcher(matcher)
77
+ matcher
12
78
  end
13
79
  end
14
80
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/configuration/resolver'
2
3
 
3
4
  module Datadog
@@ -5,32 +6,32 @@ module Datadog
5
6
  module Configuration
6
7
  # Resolves a value to a configuration key
7
8
  module Resolvers
8
- # Matches strings against Regexps.
9
- class PatternResolver < Datadog::Contrib::Configuration::Resolver
10
- def resolve(name)
9
+ # Matches Strings and Regexps against `object.to_s` objects
10
+ # and Procs against plain objects.
11
+ class PatternResolver < Contrib::Configuration::Resolver
12
+ def resolve(value)
13
+ return if configurations.empty?
14
+
11
15
  # Try to find a matching pattern
12
- matching_pattern = patterns.find do |pattern|
13
- # Rubocop incorrectly thinks assignment is done here...
14
- # rubocop:disable Style/ConditionalAssignment
15
- if pattern.is_a?(Proc)
16
- pattern === name
17
- else
18
- pattern === name.to_s # Co-erce to string
19
- end
16
+ _, config = configurations.reverse_each.find do |matcher, _|
17
+ matcher === if matcher.is_a?(Proc)
18
+ value
19
+ else
20
+ value.to_s
21
+ end
20
22
  end
21
23
 
22
- # Return match or default
23
- matching_pattern || :default
24
- end
25
-
26
- def add(pattern)
27
- patterns << (pattern.is_a?(Regexp) || pattern.is_a?(Proc) ? pattern : pattern.to_s)
24
+ config
28
25
  end
29
26
 
30
- private
27
+ protected
31
28
 
32
- def patterns
33
- @patterns ||= Set.new
29
+ def parse_matcher(matcher)
30
+ if matcher.is_a?(Regexp) || matcher.is_a?(Proc)
31
+ matcher
32
+ else
33
+ matcher.to_s
34
+ end
34
35
  end
35
36
  end
36
37
  end
@@ -1,4 +1,6 @@
1
+ # typed: false
1
2
  require 'ddtrace/configuration/base'
3
+ require 'ddtrace/utils/only_once'
2
4
 
3
5
  module Datadog
4
6
  module Contrib
@@ -7,6 +9,8 @@ module Datadog
7
9
  class Settings
8
10
  include Datadog::Configuration::Base
9
11
 
12
+ DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
13
+
10
14
  option :analytics_enabled, default: false
11
15
  option :analytics_sample_rate, default: 1.0
12
16
  option :enabled, default: true
@@ -14,7 +18,7 @@ module Datadog
14
18
  option :tracer do |o|
15
19
  o.delegate_to { Datadog.tracer }
16
20
  o.on_set do |_value|
17
- log_deprecation_warning(:tracer)
21
+ log_deprecation_warning
18
22
  end
19
23
  end
20
24
 
@@ -41,11 +45,9 @@ module Datadog
41
45
  the correct tracer internally.
42
46
  ).freeze
43
47
 
44
- include Datadog::Patcher # DEV includes #do_once here. We should move that logic to a generic component.
45
-
46
- def log_deprecation_warning(method_name)
47
- do_once(method_name) do
48
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
48
+ def log_deprecation_warning
49
+ DEPRECATION_WARN_ONLY_ONCE.run do
50
+ Datadog.logger.warn("tracer:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
49
51
  end
50
52
  end
51
53
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/dalli/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Dalli
@@ -1,3 +1,5 @@
1
+ # typed: false
2
+ require 'ddtrace/ext/integration'
1
3
  require 'ddtrace/ext/net'
2
4
  require 'ddtrace/contrib/analytics'
3
5
  require 'ddtrace/contrib/dalli/ext'
@@ -9,7 +11,7 @@ module Datadog
9
11
  # Instruments every interaction with the memcached server
10
12
  module Instrumentation
11
13
  def self.included(base)
12
- base.send(:prepend, InstanceMethods)
14
+ base.prepend(InstanceMethods)
13
15
  end
14
16
 
15
17
  # InstanceMethods - implementing instrumentation
@@ -20,6 +22,9 @@ module Datadog
20
22
  span.service = datadog_configuration[:service_name]
21
23
  span.span_type = Datadog::Contrib::Dalli::Ext::SPAN_TYPE_COMMAND
22
24
 
25
+ # Tag as an external peer service
26
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
27
+
23
28
  # Set analytics sample rate
24
29
  if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
25
30
  Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/dalli/configuration/settings'
3
4
  require 'ddtrace/contrib/dalli/patcher'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/patcher'
2
3
  require 'ddtrace/ext/app_types'
3
4
  require 'ddtrace/contrib/dalli/ext'
@@ -17,45 +18,7 @@ module Datadog
17
18
  end
18
19
 
19
20
  def patch
20
- add_pin!
21
- ::Dalli::Server.send(:include, Instrumentation)
22
- end
23
-
24
- # DEPRECATED: Only kept for users still using `Dalli.datadog_pin` to configure.
25
- # Replaced by configuration API, i.e. `c.use :dalli`.
26
- def add_pin!
27
- DeprecatedPin
28
- .new(
29
- get_option(:service_name),
30
- app: Ext::APP,
31
- app_type: Datadog::Ext::AppTypes::CACHE,
32
- tracer: -> { get_option(:tracer) }
33
- ).onto(::Dalli)
34
- end
35
-
36
- def get_option(option)
37
- Datadog.configuration[:dalli].get_option(option)
38
- end
39
-
40
- # Implementation of deprecated Pin, which raises warnings when accessed.
41
- # To be removed when support for Datadog::Pin with Dalli is removed.
42
- class DeprecatedPin < Datadog::Pin
43
- include Datadog::DeprecatedPin
44
-
45
- DEPRECATION_WARNING = %(
46
- Use of Datadog::Pin with Dalli is DEPRECATED.
47
- Upgrade to the configuration API using the migration guide here:
48
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
49
-
50
- def service_name=(service_name)
51
- Datadog.configuration[:dalli][:service_name] = service_name
52
- end
53
-
54
- def log_deprecation_warning(method_name)
55
- do_once(method_name) do
56
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
57
- end
58
- end
21
+ ::Dalli::Server.include(Instrumentation)
59
22
  end
60
23
  end
61
24
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/dalli/ext'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/delayed_job/ext'
3
4
 
@@ -23,6 +24,8 @@ module Datadog
23
24
  end
24
25
 
25
26
  option :service_name, default: Ext::SERVICE_NAME
27
+ option :client_service_name, default: Ext::CLIENT_SERVICE_NAME
28
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
26
29
  end
27
30
  end
28
31
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module DelayedJob
@@ -10,7 +11,9 @@ module Datadog
10
11
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'.freeze
11
12
  ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_DELAYED_JOB_ANALYTICS_SAMPLE_RATE'.freeze
12
13
  SERVICE_NAME = 'delayed_job'.freeze
14
+ CLIENT_SERVICE_NAME = 'delayed_job-client'.freeze
13
15
  SPAN_JOB = 'delayed_job'.freeze
16
+ SPAN_ENQUEUE = 'delayed_job.enqueue'.freeze
14
17
  TAG_ATTEMPTS = 'delayed_job.attempts'.freeze
15
18
  TAG_ID = 'delayed_job.id'.freeze
16
19
  TAG_PRIORITY = 'delayed_job.priority'.freeze
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/delayed_job/configuration/settings'
3
4
  require 'ddtrace/contrib/delayed_job/patcher'
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/patcher'
2
3
  require 'ddtrace/ext/app_types'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: ignore
1
2
  require 'delayed/plugin'
2
3
  require 'ddtrace/contrib/analytics'
3
4
  require 'ddtrace/contrib/delayed_job/ext'
@@ -7,22 +8,12 @@ module Datadog
7
8
  module DelayedJob
8
9
  # DelayedJob plugin that instruments invoke_job hook
9
10
  class Plugin < Delayed::Plugin
10
- def self.instrument(job, &block)
11
- return block.call(job) unless tracer && tracer.enabled
11
+ def self.instrument_invoke(job, &block)
12
+ return yield(job) unless tracer && tracer.enabled
12
13
 
13
- # When DelayedJob is used through ActiveJob, we need to parse the payload differentely
14
- # to get the actual job name
15
- job_name = if job.payload_object.respond_to?(:job_data)
16
- job.payload_object.job_data['job_class']
17
- else
18
- job.name
19
- end
20
-
21
- tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name) do |span|
22
- # Set analytics sample rate
23
- if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
24
- Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
25
- end
14
+ tracer.trace(Ext::SPAN_JOB, service: configuration[:service_name], resource: job_name(job),
15
+ on_error: configuration[:error_handler]) do |span|
16
+ set_sample_rate(span)
26
17
 
27
18
  # Measure service stats
28
19
  Contrib::Analytics.set_measured(span)
@@ -37,6 +28,23 @@ module Datadog
37
28
  end
38
29
  end
39
30
 
31
+ def self.instrument_enqueue(job, &block)
32
+ return yield(job) unless tracer && tracer.enabled
33
+
34
+ tracer.trace(Ext::SPAN_ENQUEUE, service: configuration[:client_service_name], resource: job_name(job)) do |span|
35
+ set_sample_rate(span)
36
+
37
+ # Measure service stats
38
+ Contrib::Analytics.set_measured(span)
39
+
40
+ span.set_tag(Ext::TAG_QUEUE, job.queue) if job.queue
41
+ span.set_tag(Ext::TAG_PRIORITY, job.priority)
42
+ span.span_type = Datadog::Ext::AppTypes::WORKER
43
+
44
+ yield job
45
+ end
46
+ end
47
+
40
48
  def self.flush(worker, &block)
41
49
  yield worker
42
50
 
@@ -51,8 +59,24 @@ module Datadog
51
59
  configuration[:tracer]
52
60
  end
53
61
 
62
+ def self.job_name(job)
63
+ # When DelayedJob is used through ActiveJob, we need to parse the payload differentely
64
+ # to get the actual job name
65
+ return job.payload_object.job_data['job_class'] if job.payload_object.respond_to?(:job_data)
66
+
67
+ job.name
68
+ end
69
+
70
+ def self.set_sample_rate(span)
71
+ # Set analytics sample rate
72
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
73
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
74
+ end
75
+ end
76
+
54
77
  callbacks do |lifecycle|
55
- lifecycle.around(:invoke_job, &method(:instrument))
78
+ lifecycle.around(:invoke_job, &method(:instrument_invoke))
79
+ lifecycle.around(:enqueue, &method(:instrument_enqueue))
56
80
  lifecycle.around(:execute, &method(:flush))
57
81
  end
58
82
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/elasticsearch/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Elasticsearch
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/elasticsearch/configuration/settings'
3
4
  require 'ddtrace/contrib/elasticsearch/patcher'
@@ -1,5 +1,8 @@
1
+ # typed: false
2
+ require 'ddtrace/patcher'
1
3
  require 'ddtrace/contrib/patcher'
2
4
  require 'ddtrace/ext/app_types'
5
+ require 'ddtrace/ext/integration'
3
6
  require 'ddtrace/ext/net'
4
7
  require 'ddtrace/contrib/analytics'
5
8
  require 'ddtrace/contrib/elasticsearch/ext'
@@ -77,6 +80,9 @@ module Datadog
77
80
  params = JSON.generate(params) if params && !params.is_a?(String)
78
81
  body = JSON.generate(body) if body && !body.is_a?(String)
79
82
 
83
+ # Tag as an external peer service
84
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
85
+
80
86
  # Set analytics sample rate
81
87
  if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
82
88
  Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
@@ -1,8 +1,11 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Elasticsearch
4
5
  # Quantize contains ES-specific resource quantization tools.
5
6
  module Quantize
7
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
8
+
6
9
  PLACEHOLDER = '?'.freeze
7
10
  ID_PLACEHOLDER = '\1?'.freeze
8
11
  EXCLUDE_KEYS = [].freeze
@@ -17,7 +20,7 @@ module Datadog
17
20
 
18
21
  def format_url(url)
19
22
  sanitize_fragment_with_id(url)
20
- .gsub(/(?:[\d]+)/, PLACEHOLDER)
23
+ .gsub(/(?:\d+)/, PLACEHOLDER)
21
24
  end
22
25
 
23
26
  def format_body(body, options = {})
@@ -60,6 +63,7 @@ module Datadog
60
63
  # If JSON parsing fails, it prints fail_value.
61
64
  def reserialize_json(string, fail_value = PLACEHOLDER)
62
65
  return string unless block_given?
66
+
63
67
  begin
64
68
  JSON.dump(yield(JSON.parse(string)))
65
69
  rescue JSON::ParserError
@@ -72,7 +76,7 @@ module Datadog
72
76
  # This is meant as simple heuristic that attempts to detect if particular fragment
73
77
  # represents document Id. This is meant to reduce the cardinality in most frequent cases.
74
78
  def sanitize_fragment_with_id(url)
75
- url.gsub(%r{^(/?[^/]*/[^/]*/)(?:[^\?/\d]*[\d]+[^\?/]*)}, ID_PLACEHOLDER)
79
+ url.gsub(%r{^(/?[^/]*/[^/]*/)(?:[^?/\d]*\d+[^?/]*)}, ID_PLACEHOLDER)
76
80
  end
77
81
  end
78
82
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/ethon/ext'
3
4
 
@@ -1,5 +1,7 @@
1
+ # typed: false
1
2
  require 'ddtrace/ext/net'
2
3
  require 'ddtrace/ext/distributed'
4
+ require 'ddtrace/ext/integration'
3
5
  require 'ddtrace/propagation/http_propagator'
4
6
  require 'ddtrace/contrib/ethon/ext'
5
7
  require 'ddtrace/contrib/http_annotation_helper'
@@ -10,7 +12,7 @@ module Datadog
10
12
  # Ethon EasyPatch
11
13
  module EasyPatch
12
14
  def self.included(base)
13
- base.send(:prepend, InstanceMethods)
15
+ base.prepend(InstanceMethods)
14
16
  end
15
17
 
16
18
  # InstanceMethods - implementing instrumentation
@@ -35,12 +37,14 @@ module Datadog
35
37
  def perform
36
38
  load_datadog_configuration_for(url)
37
39
  return super unless tracer_enabled?
40
+
38
41
  datadog_before_request
39
42
  super
40
43
  end
41
44
 
42
45
  def complete
43
46
  return super unless tracer_enabled?
47
+
44
48
  begin
45
49
  response_options = mirror.options
46
50
  response_code = (response_options[:response_code] || response_options[:code]).to_i
@@ -98,20 +102,21 @@ module Datadog
98
102
 
99
103
  def datadog_tag_request
100
104
  span = @datadog_span
101
- method = 'N/A'
102
- if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
103
- method = @datadog_method.to_s
104
- end
105
+ method = Ext::NOT_APPLICABLE_METHOD
106
+ method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
105
107
  span.resource = method
106
-
108
+ # Tag as an external peer service
109
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
107
110
  # Set analytics sample rate
108
111
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
109
112
 
110
- return unless uri
111
- span.set_tag(Datadog::Ext::HTTP::URL, uri.path)
113
+ this_uri = uri
114
+ return unless this_uri
115
+
116
+ span.set_tag(Datadog::Ext::HTTP::URL, this_uri.path)
112
117
  span.set_tag(Datadog::Ext::HTTP::METHOD, method)
113
- span.set_tag(Datadog::Ext::NET::TARGET_HOST, uri.host)
114
- span.set_tag(Datadog::Ext::NET::TARGET_PORT, uri.port)
118
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, this_uri.host)
119
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, this_uri.port)
115
120
  end
116
121
 
117
122
  def set_span_error_message(message)
@@ -122,7 +127,6 @@ module Datadog
122
127
 
123
128
  def uri
124
129
  URI.parse(url)
125
- # rubocop:disable Lint/HandleExceptions
126
130
  rescue URI::InvalidURIError
127
131
  end
128
132
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Ethon
@@ -12,6 +13,7 @@ module Datadog
12
13
  SERVICE_NAME = 'ethon'.freeze
13
14
  SPAN_REQUEST = 'ethon.request'.freeze
14
15
  SPAN_MULTI_REQUEST = 'ethon.multi.request'.freeze
16
+ NOT_APPLICABLE_METHOD = 'N/A'.freeze
15
17
  end
16
18
  end
17
19
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/ethon/configuration/settings'
3
4
  require 'ddtrace/contrib/configuration/resolvers/pattern_resolver'
@@ -1,5 +1,7 @@
1
+ # typed: false
1
2
  require 'ddtrace/ext/net'
2
3
  require 'ddtrace/ext/distributed'
4
+ require 'ddtrace/ext/integration'
3
5
  require 'ddtrace/propagation/http_propagator'
4
6
  require 'ddtrace/contrib/ethon/ext'
5
7
 
@@ -10,7 +12,7 @@ module Datadog
10
12
  module MultiPatch
11
13
  def self.included(base)
12
14
  # No need to prepend here since add method is included into Multi class
13
- base.send(:include, InstanceMethods)
15
+ base.include(InstanceMethods)
14
16
  end
15
17
 
16
18
  # InstanceMethods - implementing instrumentation
@@ -52,6 +54,9 @@ module Datadog
52
54
  service: datadog_configuration[:service_name]
53
55
  )
54
56
 
57
+ # Tag as an external peer service
58
+ @datadog_multi_span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, @datadog_multi_span.service)
59
+
55
60
  # Set analytics sample rate
56
61
  Contrib::Analytics.set_sample_rate(@datadog_multi_span, analytics_sample_rate) if analytics_enabled?
57
62
 
@@ -1,8 +1,10 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Ethon
4
5
  # Patcher enables patching of 'ethon' module.
5
6
  module Patcher
7
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
6
8
  include Contrib::Patcher
7
9
 
8
10
  module_function
@@ -16,8 +18,8 @@ module Datadog
16
18
  require 'ddtrace/contrib/ethon/easy_patch'
17
19
  require 'ddtrace/contrib/ethon/multi_patch'
18
20
 
19
- ::Ethon::Easy.send(:include, EasyPatch)
20
- ::Ethon::Multi.send(:include, MultiPatch)
21
+ ::Ethon::Easy.include(EasyPatch)
22
+ ::Ethon::Multi.include(MultiPatch)
21
23
  end
22
24
  end
23
25
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/excon/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Excon
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/excon/configuration/settings'
3
4
  require 'ddtrace/contrib/configuration/resolvers/pattern_resolver'