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
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/patcher'
2
3
  require 'ddtrace/contrib/active_support/cache/instrumentation'
3
4
 
@@ -17,8 +18,11 @@ module Datadog
17
18
 
18
19
  def patch
19
20
  patch_cache_store_read
21
+ patch_cache_store_read_multi
20
22
  patch_cache_store_fetch
23
+ patch_cache_store_fetch_multi
21
24
  patch_cache_store_write
25
+ patch_cache_store_write_multi
22
26
  patch_cache_store_delete
23
27
  end
24
28
 
@@ -27,19 +31,37 @@ module Datadog
27
31
  end
28
32
 
29
33
  def patch_cache_store_read
30
- cache_store_class(:read).send(:prepend, Cache::Instrumentation::Read)
34
+ cache_store_class(:read).prepend(Cache::Instrumentation::Read)
35
+ end
36
+
37
+ def patch_cache_store_read_multi
38
+ cache_store_class(:read_multi).prepend(Cache::Instrumentation::ReadMulti)
31
39
  end
32
40
 
33
41
  def patch_cache_store_fetch
34
- cache_store_class(:fetch).send(:prepend, Cache::Instrumentation::Fetch)
42
+ cache_store_class(:fetch).prepend(Cache::Instrumentation::Fetch)
43
+ end
44
+
45
+ def patch_cache_store_fetch_multi
46
+ klass = cache_store_class(:fetch_multi)
47
+ return unless klass.public_method_defined?(:fetch_multi)
48
+
49
+ klass.prepend(Cache::Instrumentation::FetchMulti)
35
50
  end
36
51
 
37
52
  def patch_cache_store_write
38
- cache_store_class(:write).send(:prepend, Cache::Instrumentation::Write)
53
+ cache_store_class(:write).prepend(Cache::Instrumentation::Write)
54
+ end
55
+
56
+ def patch_cache_store_write_multi
57
+ klass = cache_store_class(:write_multi)
58
+ return unless klass.public_method_defined?(:write_multi)
59
+
60
+ klass.prepend(Cache::Instrumentation::WriteMulti)
39
61
  end
40
62
 
41
63
  def patch_cache_store_delete
42
- cache_store_class(:delete).send(:prepend, Cache::Instrumentation::Delete)
64
+ cache_store_class(:delete).prepend(Cache::Instrumentation::Delete)
43
65
  end
44
66
  end
45
67
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/active_support/cache/patcher'
2
3
 
3
4
  module Datadog
@@ -35,11 +36,7 @@ module Datadog
35
36
  end
36
37
 
37
38
  # Decorate Cache patcher with Redis support
38
- Cache::Patcher.instance_eval do
39
- class << self
40
- prepend Redis::Patcher
41
- end
42
- end
39
+ Cache::Patcher.singleton_class.prepend(Redis::Patcher)
43
40
  end
44
41
  end
45
42
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/active_support/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module ActiveSupport
@@ -12,12 +13,15 @@ module Datadog
12
13
  QUANTIZE_CACHE_MAX_KEY_SIZE = 300
13
14
  RESOURCE_CACHE_DELETE = 'DELETE'.freeze
14
15
  RESOURCE_CACHE_GET = 'GET'.freeze
16
+ RESOURCE_CACHE_MGET = 'MGET'.freeze
15
17
  RESOURCE_CACHE_SET = 'SET'.freeze
18
+ RESOURCE_CACHE_MSET = 'MSET'.freeze
16
19
  SERVICE_CACHE = 'active_support-cache'.freeze
17
20
  SPAN_CACHE = 'rails.cache'.freeze
18
21
  SPAN_TYPE_CACHE = 'cache'.freeze
19
22
  TAG_CACHE_BACKEND = 'rails.cache.backend'.freeze
20
23
  TAG_CACHE_KEY = 'rails.cache.key'.freeze
24
+ TAG_CACHE_KEY_MULTI = 'rails.cache.keys'.freeze
21
25
  end
22
26
  end
23
27
  end
@@ -1,8 +1,9 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/active_support/configuration/settings'
3
4
  require 'ddtrace/contrib/active_support/patcher'
4
-
5
5
  require 'ddtrace/contrib/active_support/cache/redis'
6
+ require 'ddtrace/contrib/rails/utils'
6
7
 
7
8
  module Datadog
8
9
  module Contrib
@@ -27,6 +28,12 @@ module Datadog
27
28
  super && version >= MINIMUM_VERSION
28
29
  end
29
30
 
31
+ # enabled by rails integration so should only auto instrument
32
+ # if detected that it is being used without rails
33
+ def auto_instrument?
34
+ !Datadog::Contrib::Rails::Utils.railtie_supported?
35
+ end
36
+
30
37
  def default_configuration
31
38
  Configuration::Settings.new
32
39
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/active_support/notifications/subscriber'
2
3
 
3
4
  module Datadog
@@ -10,8 +11,8 @@ module Datadog
10
11
  # invoke Event.subscribe! to more easily subscribe to an event.
11
12
  module Event
12
13
  def self.included(base)
13
- base.send(:include, Subscriber)
14
- base.send(:extend, ClassMethods)
14
+ base.include(Subscriber)
15
+ base.extend(ClassMethods)
15
16
  base.send(:on_subscribe) { base.subscribe }
16
17
  end
17
18
 
@@ -20,7 +21,8 @@ module Datadog
20
21
  module ClassMethods
21
22
  DEFAULT_TRACER = -> { Datadog.tracer }
22
23
 
23
- def subscribe!
24
+ # Publicly exposes protected method `subscribe!`
25
+ def subscribe! # rubocop:disable Lint/UselessMethodDefinition
24
26
  super
25
27
  end
26
28
 
@@ -56,6 +58,16 @@ module Datadog
56
58
  def tracer
57
59
  DEFAULT_TRACER
58
60
  end
61
+
62
+ def report_if_exception(span, payload)
63
+ exception = payload_exception(payload)
64
+ span.set_error(payload[:exception]) if exception
65
+ end
66
+
67
+ def payload_exception(payload)
68
+ payload[:exception_object] ||
69
+ payload[:exception] # Fallback for ActiveSupport < 5.0
70
+ end
59
71
  end
60
72
  end
61
73
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'set'
2
3
  require 'ddtrace/contrib/active_support/notifications/subscription'
3
4
 
@@ -9,7 +10,7 @@ module Datadog
9
10
  # Creates subscriptions that are wrapped with tracing.
10
11
  module Subscriber
11
12
  def self.included(base)
12
- base.send(:extend, ClassMethods)
13
+ base.extend(ClassMethods)
13
14
  end
14
15
 
15
16
  # Class methods that are implemented in the inheriting class.
@@ -36,6 +37,7 @@ module Datadog
36
37
  # Should be triggered by the inheriting class.
37
38
  def subscribe!
38
39
  return subscribed? if subscribed? || on_subscribe_block.nil?
40
+
39
41
  on_subscribe_block.call
40
42
  @subscribed = true
41
43
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  module Datadog
2
3
  module Contrib
3
4
  module ActiveSupport
@@ -9,7 +10,8 @@ module Datadog
9
10
  :options
10
11
 
11
12
  def initialize(tracer, span_name, options, &block)
12
- raise ArgumentError, 'Must be given a block!' unless block_given?
13
+ raise ArgumentError, 'Must be given a block!' unless block
14
+
13
15
  @tracer = tracer
14
16
  @span_name = span_name
15
17
  @options = options
@@ -38,21 +40,23 @@ module Datadog
38
40
  end
39
41
 
40
42
  def before_trace(&block)
41
- callbacks.add(:before_trace, &block) if block_given?
43
+ callbacks.add(:before_trace, &block) if block
42
44
  end
43
45
 
44
46
  def after_trace(&block)
45
- callbacks.add(:after_trace, &block) if block_given?
47
+ callbacks.add(:after_trace, &block) if block
46
48
  end
47
49
 
48
50
  def subscribe(pattern)
49
51
  return false if subscribers.key?(pattern)
52
+
50
53
  subscribers[pattern] = ::ActiveSupport::Notifications.subscribe(pattern, self)
51
54
  true
52
55
  end
53
56
 
54
57
  def unsubscribe(pattern)
55
58
  return false unless subscribers.key?(pattern)
59
+
56
60
  ::ActiveSupport::Notifications.unsubscribe(subscribers[pattern])
57
61
  subscribers.delete(pattern)
58
62
  true
@@ -60,7 +64,8 @@ module Datadog
60
64
 
61
65
  def unsubscribe_all
62
66
  return false if subscribers.empty?
63
- subscribers.keys.each { |pattern| unsubscribe(pattern) }
67
+
68
+ subscribers.each_key { |pattern| unsubscribe(pattern) }
64
69
  true
65
70
  end
66
71
 
@@ -131,7 +136,7 @@ module Datadog
131
136
  end
132
137
 
133
138
  def add(key, &block)
134
- blocks_for(key) << block if block_given?
139
+ blocks_for(key) << block if block
135
140
  end
136
141
 
137
142
  def run(event, key, *args)
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/patcher'
2
3
  require 'ddtrace/contrib/active_support/cache/patcher'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/analytics'
2
3
 
3
4
  module Datadog
@@ -0,0 +1,48 @@
1
+ # typed: false
2
+
3
+ module Datadog
4
+ module Contrib
5
+ # Extensions for auto instrumentation added to the base library
6
+ # AutoInstrumentation enables all integration
7
+ module AutoInstrument
8
+ def self.extended(base)
9
+ base.extend(Patch)
10
+ end
11
+
12
+ # Patch adds method for invoking auto_instrumentation
13
+ module Patch
14
+ def add_auto_instrument
15
+ super
16
+
17
+ if Datadog::Contrib::Rails::Utils.railtie_supported?
18
+ require 'ddtrace/contrib/rails/auto_instrument_railtie'
19
+ else
20
+ AutoInstrument.patch_all
21
+ end
22
+ end
23
+ end
24
+
25
+ def self.patch_all
26
+ integrations = []
27
+
28
+ Contrib::REGISTRY.each do |integration|
29
+ # some instrumentations are automatically enabled when the `rails` instrumentation is enabled,
30
+ # patching them on their own automatically outside of the rails integration context would
31
+ # cause undesirable service naming, so we exclude them based their auto_instrument? setting.
32
+ # we also don't want to mix rspec/cucumber integration in as rspec is env we run tests in.
33
+ next unless integration.klass.auto_instrument?
34
+
35
+ integrations << integration.name
36
+ end
37
+
38
+ Datadog.configure do |c|
39
+ c.reduce_log_verbosity
40
+ # This will activate auto-instrumentation for Rails
41
+ integrations.each do |integration_name|
42
+ c.use integration_name
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/aws/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Aws
@@ -1,5 +1,7 @@
1
+ # typed: ignore
1
2
  require 'ddtrace/contrib/analytics'
2
3
  require 'ddtrace/contrib/aws/ext'
4
+ require 'ddtrace/ext/http'
3
5
  require 'ddtrace/ext/integration'
4
6
 
5
7
  module Datadog
@@ -26,7 +28,7 @@ module Datadog
26
28
 
27
29
  def annotate!(span, context)
28
30
  span.service = configuration[:service_name]
29
- span.span_type = Datadog::Ext::AppTypes::WEB
31
+ span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
30
32
  span.name = Ext::SPAN_COMMAND
31
33
  span.resource = context.safely(:resource)
32
34
 
@@ -55,6 +57,35 @@ module Datadog
55
57
  Datadog.configuration[:aws]
56
58
  end
57
59
  end
60
+
61
+ # Removes API request instrumentation from S3 Presign URL creation.
62
+ #
63
+ # This is necessary because the S3 SDK invokes the same handler
64
+ # stack for presigning as it does for sending a real requests.
65
+ # But presigning does not perform a network request.
66
+ # There's not information available for our Handler plugin to differentiate
67
+ # these two types of requests.
68
+ #
69
+ # DEV: Since aws-sdk-s3 1.94.1, we only need to check if
70
+ # `context[:presigned_url] == true` in Datadog::Contrib::Aws::Handler#call
71
+ # and skip the request if that condition is true. Since there's
72
+ # no strong reason for us not to support older versions of `aws-sdk-s3`,
73
+ # this {S3Presigner} monkey-patching is still required.
74
+ module S3Presigner
75
+ # Exclude our Handler from the current request's handler stack.
76
+ #
77
+ # This is the same approach that the AWS SDK takes to prevent
78
+ # some of its plugins form interfering with the presigning process:
79
+ # https://github.com/aws/aws-sdk-ruby/blob/a82c8981c95a8296ffb6269c3c06a4f551d87f7d/gems/aws-sdk-s3/lib/aws-sdk-s3/presigner.rb#L194-L196
80
+ def sign_but_dont_send(*args, &block)
81
+ if (request = args[0]).is_a?(::Seahorse::Client::Request)
82
+ request.handlers.remove(Handler)
83
+ end
84
+
85
+ super(*args, &block)
86
+ end
87
+ ruby2_keywords :sign_but_dont_send if respond_to?(:ruby2_keywords, true)
88
+ end
58
89
  end
59
90
  end
60
91
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/aws/configuration/settings'
3
4
  require 'ddtrace/contrib/aws/patcher'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module Aws
@@ -1,5 +1,5 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/patcher'
2
- require 'ddtrace/ext/app_types'
3
3
  require 'ddtrace/contrib/aws/ext'
4
4
 
5
5
  module Datadog
@@ -21,6 +21,10 @@ module Datadog
21
21
  require 'ddtrace/contrib/aws/services'
22
22
 
23
23
  add_plugin(Seahorse::Client::Base, *loaded_constants)
24
+
25
+ # Special handling for S3 URL Presigning.
26
+ # @see {Datadog::Contrib::Aws::S3Presigner}
27
+ ::Aws::S3::Presigner.prepend(S3Presigner) if defined?(::Aws::S3::Presigner)
24
28
  end
25
29
 
26
30
  def add_plugin(*targets)
@@ -36,6 +40,7 @@ module Datadog
36
40
 
37
41
  available_services.each_with_object([]) do |service, constants|
38
42
  next if ::Aws.autoload?(service)
43
+
39
44
  constants << ::Aws.const_get(service, false).const_get(:Client, false) rescue next
40
45
  end
41
46
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  # rubocop:disable Metrics/ModuleLength:
@@ -52,6 +53,7 @@ module Datadog
52
53
  ElasticLoadBalancingV2
53
54
  ElasticTranscoder
54
55
  ElasticsearchService
56
+ EventBridge
55
57
  Firehose
56
58
  GameLift
57
59
  Glacier
@@ -98,12 +100,14 @@ module Datadog
98
100
  STS
99
101
  SWF
100
102
  ServiceCatalog
103
+ Schemas
101
104
  Shield
102
105
  SimpleDB
103
106
  Snowball
104
107
  States
105
108
  StorageGateway
106
109
  Support
110
+ Textract
107
111
  WAF
108
112
  WAFRegional
109
113
  WorkDocs
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/configuration/settings'
2
3
  require 'ddtrace/contrib/concurrent_ruby/ext'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'concurrent/executor/executor_service'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Contrib
3
4
  module ConcurrentRuby
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/concurrent_ruby/context_composite_executor_service'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/contrib/integration'
2
3
  require 'ddtrace/contrib/concurrent_ruby/patcher'
3
4
  require 'ddtrace/contrib/concurrent_ruby/configuration/settings'
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/patcher'
2
3
 
3
4
  module Datadog
@@ -5,6 +6,7 @@ module Datadog
5
6
  module ConcurrentRuby
6
7
  # Patcher enables patching of 'Future' class.
7
8
  module Patcher
9
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
8
10
  include Contrib::Patcher
9
11
 
10
12
  module_function
@@ -20,7 +22,7 @@ module Datadog
20
22
 
21
23
  # Propagate tracing context in Concurrent::Future
22
24
  def patch_future
23
- ::Concurrent::Future.send(:include, FuturePatch)
25
+ ::Concurrent::Future.include(FuturePatch)
24
26
  end
25
27
  end
26
28
  end
@@ -1,74 +1,101 @@
1
+ # typed: true
1
2
  require 'ddtrace/contrib/configuration/resolver'
2
3
  require 'ddtrace/contrib/configuration/settings'
3
4
 
4
5
  module Datadog
5
6
  module Contrib
6
- # Defines configurable behavior for integrations
7
+ # Defines configurable behavior for integrations.
8
+ #
9
+ # This module is responsible for coordination between
10
+ # the configuration resolver and default configuration
11
+ # fallback.
7
12
  module Configurable
8
13
  def self.included(base)
9
- base.send(:include, InstanceMethods)
14
+ base.include(InstanceMethods)
10
15
  end
11
16
 
12
17
  # Configurable instance behavior for integrations
13
18
  module InstanceMethods
19
+ # Provides a new configuration instance for this integration.
20
+ #
21
+ # This method normally needs to be overridden for each integration
22
+ # as their settings, defaults and environment variables are
23
+ # specific for each integration.
24
+ #
25
+ # DEV(1.0): Rename to `new_configuration`, make it protected.
26
+ # DEV(1.0):
27
+ # DEV(1.0): This method always provides a new instance of the configuration object for
28
+ # DEV(1.0): the current integration, not the currently effective default configuration.
29
+ # DEV(1.0): This is a misnomer of its function.
30
+ # DEV(1.0):
31
+ # DEV(1.0): Unfortunately, change this would be a breaking change for all custom integrations,
32
+ # DEV(1.0): thus we have to be very intentional with the right time to make this change.
33
+ # DEV(1.0): Currently marking this for a 1.0 milestone.
14
34
  def default_configuration
15
35
  Configuration::Settings.new
16
36
  end
17
37
 
18
- def reset_configuration!
19
- @configurations = nil
20
- @resolver = nil
21
- end
38
+ # Get matching configuration by matcher.
39
+ # If no match, returns the default configuration instance.
40
+ def configuration(matcher = :default)
41
+ return default_configuration_instance if matcher == :default
22
42
 
23
- # Get matching configuration for key.
24
- # If no match, returns default configuration.
25
- def configuration(key = :default)
26
- configurations[configuration_key(key)]
43
+ resolver.get(matcher) || default_configuration_instance
27
44
  end
28
45
 
29
- # If the key has matching configuration explicitly defined for it,
30
- # then return true. Otherwise return false.
31
- def configuration_for?(key)
32
- key = resolver.resolve(key) unless key == :default
33
- configurations.key?(key)
46
+ # Resolves the matching configuration for integration-specific value.
47
+ # If no match, returns the default configuration instance.
48
+ def resolve(value)
49
+ return default_configuration_instance if value == :default
50
+
51
+ resolver.resolve(value) || default_configuration_instance
34
52
  end
35
53
 
54
+ # Returns all registered matchers and their respective configurations.
36
55
  def configurations
37
- @configurations ||= {
38
- default: default_configuration
39
- }
56
+ resolver.configurations.merge(default: default_configuration_instance)
40
57
  end
41
58
 
42
- # Create or update configuration with provided settings.
43
- def configure(key, options = {}, &block)
44
- key ||= :default
45
-
46
- # Get or add the configuration
47
- config = configuration_for?(key) ? configuration(key) : add_configuration(key)
59
+ # Create or update configuration associated with `matcher` with
60
+ # the provided `options` and `&block`.
61
+ def configure(matcher = :default, options = {}, &block)
62
+ config = if matcher == :default
63
+ default_configuration_instance
64
+ else
65
+ # Get or add the configuration
66
+ resolver.get(matcher) || resolver.add(matcher, default_configuration)
67
+ end
48
68
 
49
69
  # Apply the settings
50
70
  config.configure(options, &block)
51
71
  config
52
72
  end
53
73
 
54
- protected
55
-
56
- def resolver
57
- @resolver ||= Configuration::Resolver.new
74
+ # Resets all configuration options
75
+ def reset_configuration!
76
+ @resolver = nil
77
+ @default_configuration = nil
58
78
  end
59
79
 
60
- def add_configuration(key)
61
- resolver.add(key)
62
- config_key = resolver.resolve(key)
63
- configurations[config_key] = default_configuration
64
- end
80
+ protected
65
81
 
66
- def configuration_key(key)
67
- return :default if key.nil? || key == :default
82
+ # DEV(1.0): Rename to `default_configuration`, make it public.
83
+ # DEV(1.0): See comment on `default_configuration` for more information.
84
+ def default_configuration_instance
85
+ @default_configuration ||= default_configuration # rubocop:disable Naming/MemoizedInstanceVariableName
86
+ end
68
87
 
69
- key = resolver.resolve(key)
70
- key = :default unless configurations.key?(key)
71
- key
88
+ # Overridable configuration resolver.
89
+ #
90
+ # This resolver is responsible for performing the matching
91
+ # of `#configure(matcher)` `matcher`s with `value`s provided
92
+ # in subsequent calls to `#resolve(value)`.
93
+ #
94
+ # By default, the `value` in `#resolve(value)` must be equal
95
+ # to the `matcher` object provided in `#configure(matcher)`
96
+ # to retrieve the associated configuration.
97
+ def resolver
98
+ @resolver ||= Configuration::Resolver.new
72
99
  end
73
100
  end
74
101
  end