ddtrace 0.13.0 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +598 -381
  3. data/.circleci/images/primary/Dockerfile-2.0.0 +6 -2
  4. data/.circleci/images/primary/Dockerfile-2.1.10 +6 -2
  5. data/.circleci/images/primary/Dockerfile-2.2.10 +6 -2
  6. data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
  7. data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
  8. data/.circleci/images/primary/{Dockerfile-2.3.7 → Dockerfile-2.5.6} +2 -2
  9. data/.circleci/images/primary/{Dockerfile-2.4.4 → Dockerfile-2.6.4} +2 -2
  10. data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
  11. data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
  12. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +78 -0
  13. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
  14. data/.circleci/images/primary/{Dockerfile-1.9.3 → Dockerfile-truffleruby-21.0.0} +6 -2
  15. data/.env +5 -2
  16. data/.github/CODEOWNERS +1 -0
  17. data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
  18. data/.github/workflows/create-next-milestone.yml +20 -0
  19. data/.gitignore +2 -0
  20. data/.gitlab-ci.yml +27 -0
  21. data/.rubocop.yml +270 -6
  22. data/.rubocop_todo.yml +397 -0
  23. data/.simplecov +47 -0
  24. data/Appraisals +933 -127
  25. data/CHANGELOG.md +2106 -97
  26. data/CONTRIBUTING.md +85 -0
  27. data/Gemfile +55 -2
  28. data/LICENSE +4 -22
  29. data/LICENSE-3rdparty.csv +2 -0
  30. data/LICENSE.Apache +200 -0
  31. data/LICENSE.BSD3 +24 -0
  32. data/NOTICE +4 -0
  33. data/README.md +5 -34
  34. data/Rakefile +825 -351
  35. data/benchmarks/postgres_database.yml +9 -0
  36. data/benchmarks/sidekiq_test.rb +154 -0
  37. data/ddtrace.gemspec +8 -17
  38. data/docker-compose.yml +260 -47
  39. data/docs/DevelopmentGuide.md +249 -0
  40. data/docs/GettingStarted.md +1435 -290
  41. data/integration/README.md +68 -0
  42. data/integration/apps/rack/.dockerignore +1 -0
  43. data/integration/apps/rack/.envrc.sample +1 -0
  44. data/integration/apps/rack/.gitignore +4 -0
  45. data/integration/apps/rack/.rspec +1 -0
  46. data/integration/apps/rack/Dockerfile +25 -0
  47. data/integration/apps/rack/Dockerfile-ci +11 -0
  48. data/integration/apps/rack/Gemfile +24 -0
  49. data/integration/apps/rack/README.md +93 -0
  50. data/integration/apps/rack/app/acme.rb +80 -0
  51. data/integration/apps/rack/app/datadog.rb +17 -0
  52. data/integration/apps/rack/bin/run +22 -0
  53. data/integration/apps/rack/bin/setup +17 -0
  54. data/integration/apps/rack/bin/test +24 -0
  55. data/integration/apps/rack/config.ru +6 -0
  56. data/integration/apps/rack/config/puma.rb +14 -0
  57. data/integration/apps/rack/config/unicorn.rb +23 -0
  58. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  59. data/integration/apps/rack/docker-compose.yml +78 -0
  60. data/integration/apps/rack/script/build-images +38 -0
  61. data/integration/apps/rack/script/ci +50 -0
  62. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  63. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  64. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  65. data/integration/apps/rails-five/.dockerignore +1 -0
  66. data/integration/apps/rails-five/.env +3 -0
  67. data/integration/apps/rails-five/.envrc.sample +1 -0
  68. data/integration/apps/rails-five/.gitignore +30 -0
  69. data/integration/apps/rails-five/Dockerfile +25 -0
  70. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  71. data/integration/apps/rails-five/Gemfile +104 -0
  72. data/integration/apps/rails-five/README.md +94 -0
  73. data/integration/apps/rails-five/Rakefile +6 -0
  74. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  75. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  76. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  77. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  78. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  79. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  80. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  81. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  82. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  83. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  84. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  85. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  86. data/integration/apps/rails-five/app/models/test.rb +2 -0
  87. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  88. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  89. data/integration/apps/rails-five/bin/bundle +3 -0
  90. data/integration/apps/rails-five/bin/rails +9 -0
  91. data/integration/apps/rails-five/bin/rake +9 -0
  92. data/integration/apps/rails-five/bin/run +24 -0
  93. data/integration/apps/rails-five/bin/setup +27 -0
  94. data/integration/apps/rails-five/bin/spring +17 -0
  95. data/integration/apps/rails-five/bin/test +21 -0
  96. data/integration/apps/rails-five/bin/update +28 -0
  97. data/integration/apps/rails-five/config.ru +5 -0
  98. data/integration/apps/rails-five/config/application.rb +97 -0
  99. data/integration/apps/rails-five/config/boot.rb +4 -0
  100. data/integration/apps/rails-five/config/cable.yml +10 -0
  101. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  102. data/integration/apps/rails-five/config/database.yml +28 -0
  103. data/integration/apps/rails-five/config/environment.rb +5 -0
  104. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  105. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  106. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  107. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  108. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  109. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  110. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  111. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  112. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  113. data/integration/apps/rails-five/config/puma.rb +24 -0
  114. data/integration/apps/rails-five/config/routes.rb +11 -0
  115. data/integration/apps/rails-five/config/spring.rb +6 -0
  116. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  117. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  118. data/integration/apps/rails-five/db/schema.rb +23 -0
  119. data/integration/apps/rails-five/db/seeds.rb +7 -0
  120. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  121. data/integration/apps/rails-five/docker-compose.yml +100 -0
  122. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  123. data/integration/apps/rails-five/log/.keep +0 -0
  124. data/integration/apps/rails-five/public/robots.txt +1 -0
  125. data/integration/apps/rails-five/script/build-images +35 -0
  126. data/integration/apps/rails-five/script/ci +50 -0
  127. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  128. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  129. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  130. data/integration/apps/rails-five/storage/.keep +0 -0
  131. data/integration/apps/rails-five/tmp/.keep +0 -0
  132. data/integration/apps/rails-five/vendor/.keep +0 -0
  133. data/integration/apps/ruby/.dockerignore +1 -0
  134. data/integration/apps/ruby/.envrc.sample +1 -0
  135. data/integration/apps/ruby/.gitignore +2 -0
  136. data/integration/apps/ruby/Dockerfile +25 -0
  137. data/integration/apps/ruby/Dockerfile-ci +11 -0
  138. data/integration/apps/ruby/Gemfile +11 -0
  139. data/integration/apps/ruby/README.md +70 -0
  140. data/integration/apps/ruby/agent.yaml +3 -0
  141. data/integration/apps/ruby/app/datadog.rb +13 -0
  142. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  143. data/integration/apps/ruby/bin/run +20 -0
  144. data/integration/apps/ruby/bin/setup +17 -0
  145. data/integration/apps/ruby/bin/test +21 -0
  146. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  147. data/integration/apps/ruby/docker-compose.yml +63 -0
  148. data/integration/apps/ruby/script/build-images +38 -0
  149. data/integration/apps/ruby/script/ci +50 -0
  150. data/integration/images/agent/Dockerfile +2 -0
  151. data/integration/images/agent/agent.yaml +3 -0
  152. data/integration/images/include/datadog/analyzer.rb +71 -0
  153. data/integration/images/include/datadog/demo_env.rb +101 -0
  154. data/integration/images/include/http-health-check +33 -0
  155. data/integration/images/ruby/2.0/Dockerfile +54 -0
  156. data/integration/images/ruby/2.1/Dockerfile +54 -0
  157. data/integration/images/ruby/2.2/Dockerfile +54 -0
  158. data/integration/images/ruby/2.3/Dockerfile +70 -0
  159. data/integration/images/ruby/2.4/Dockerfile +54 -0
  160. data/integration/images/ruby/2.5/Dockerfile +54 -0
  161. data/integration/images/ruby/2.6/Dockerfile +54 -0
  162. data/integration/images/ruby/2.7/Dockerfile +54 -0
  163. data/integration/images/ruby/3.0/Dockerfile +54 -0
  164. data/integration/images/wrk/Dockerfile +33 -0
  165. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  166. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  167. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  168. data/integration/script/build-images +43 -0
  169. data/lib/ddtrace.rb +65 -62
  170. data/lib/ddtrace/analytics.rb +38 -0
  171. data/lib/ddtrace/auto_instrument.rb +3 -0
  172. data/lib/ddtrace/auto_instrument_base.rb +6 -0
  173. data/lib/ddtrace/buffer.rb +298 -32
  174. data/lib/ddtrace/chunker.rb +34 -0
  175. data/lib/ddtrace/configuration.rb +151 -26
  176. data/lib/ddtrace/configuration/base.rb +84 -0
  177. data/lib/ddtrace/configuration/components.rb +151 -0
  178. data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
  179. data/lib/ddtrace/configuration/option.rb +64 -0
  180. data/lib/ddtrace/configuration/option_definition.rb +121 -0
  181. data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
  182. data/lib/ddtrace/configuration/option_set.rb +6 -0
  183. data/lib/ddtrace/configuration/options.rb +111 -0
  184. data/lib/ddtrace/configuration/pin_setup.rb +4 -3
  185. data/lib/ddtrace/configuration/settings.rb +299 -0
  186. data/lib/ddtrace/context.rb +133 -66
  187. data/lib/ddtrace/context_flush.rb +51 -114
  188. data/lib/ddtrace/context_provider.rb +61 -0
  189. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +30 -0
  190. data/lib/ddtrace/contrib/action_cable/event.rb +66 -0
  191. data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
  192. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
  193. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
  194. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
  195. data/lib/ddtrace/contrib/action_cable/ext.rb +26 -0
  196. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
  197. data/lib/ddtrace/contrib/action_cable/integration.rb +45 -0
  198. data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
  199. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +146 -0
  200. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +25 -0
  201. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +32 -0
  202. data/lib/ddtrace/contrib/action_pack/ext.rb +19 -0
  203. data/lib/ddtrace/contrib/action_pack/integration.rb +45 -0
  204. data/lib/ddtrace/contrib/action_pack/patcher.rb +23 -0
  205. data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
  206. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +31 -0
  207. data/lib/ddtrace/contrib/action_view/event.rb +35 -0
  208. data/lib/ddtrace/contrib/action_view/events.rb +30 -0
  209. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +46 -0
  210. data/lib/ddtrace/contrib/action_view/events/render_template.rb +49 -0
  211. data/lib/ddtrace/contrib/action_view/ext.rb +20 -0
  212. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +74 -0
  213. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
  214. data/lib/ddtrace/contrib/action_view/integration.rb +52 -0
  215. data/lib/ddtrace/contrib/action_view/patcher.rb +47 -0
  216. data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
  217. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +30 -0
  218. data/lib/ddtrace/contrib/active_model_serializers/event.rb +14 -3
  219. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +2 -2
  220. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +2 -2
  221. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +20 -0
  222. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +40 -0
  223. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +12 -45
  224. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +128 -0
  225. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +35 -0
  226. data/lib/ddtrace/contrib/active_record/event.rb +1 -1
  227. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +17 -8
  228. data/lib/ddtrace/contrib/active_record/events/sql.rb +32 -12
  229. data/lib/ddtrace/contrib/active_record/ext.rb +24 -0
  230. data/lib/ddtrace/contrib/active_record/integration.rb +53 -0
  231. data/lib/ddtrace/contrib/active_record/patcher.rb +5 -35
  232. data/lib/ddtrace/contrib/active_record/utils.rb +85 -31
  233. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +258 -0
  234. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +69 -0
  235. data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
  236. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +30 -0
  237. data/lib/ddtrace/contrib/active_support/ext.rb +27 -0
  238. data/lib/ddtrace/contrib/active_support/integration.rb +46 -0
  239. data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -2
  240. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -2
  241. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +20 -12
  242. data/lib/ddtrace/contrib/active_support/patcher.rb +23 -0
  243. data/lib/ddtrace/contrib/analytics.rb +24 -0
  244. data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
  245. data/lib/ddtrace/contrib/aws/configuration/settings.rb +30 -0
  246. data/lib/ddtrace/contrib/aws/ext.rb +23 -0
  247. data/lib/ddtrace/contrib/aws/instrumentation.rb +37 -19
  248. data/lib/ddtrace/contrib/aws/integration.rb +42 -0
  249. data/lib/ddtrace/contrib/aws/patcher.rb +30 -40
  250. data/lib/ddtrace/contrib/aws/services.rb +3 -0
  251. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +20 -0
  252. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +41 -0
  253. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +12 -0
  254. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
  255. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +38 -0
  256. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +28 -0
  257. data/lib/ddtrace/contrib/configurable.rb +102 -0
  258. data/lib/ddtrace/contrib/configuration/resolver.rb +81 -0
  259. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
  260. data/lib/ddtrace/contrib/configuration/settings.rb +55 -0
  261. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
  262. data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
  263. data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
  264. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
  265. data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
  266. data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
  267. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +30 -0
  268. data/lib/ddtrace/contrib/dalli/ext.rb +20 -0
  269. data/lib/ddtrace/contrib/dalli/instrumentation.rb +36 -17
  270. data/lib/ddtrace/contrib/dalli/integration.rb +38 -0
  271. data/lib/ddtrace/contrib/dalli/patcher.rb +13 -41
  272. data/lib/ddtrace/contrib/dalli/quantize.rb +4 -4
  273. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +32 -0
  274. data/lib/ddtrace/contrib/delayed_job/ext.rb +23 -0
  275. data/lib/ddtrace/contrib/delayed_job/integration.rb +38 -0
  276. data/lib/ddtrace/contrib/delayed_job/patcher.rb +28 -0
  277. data/lib/ddtrace/contrib/delayed_job/plugin.rb +84 -0
  278. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +31 -0
  279. data/lib/ddtrace/contrib/elasticsearch/ext.rb +22 -0
  280. data/lib/ddtrace/contrib/elasticsearch/integration.rb +39 -0
  281. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +49 -50
  282. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  283. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +32 -0
  284. data/lib/ddtrace/contrib/ethon/easy_patch.rb +151 -0
  285. data/lib/ddtrace/contrib/ethon/ext.rb +19 -0
  286. data/lib/ddtrace/contrib/ethon/integration.rb +43 -0
  287. data/lib/ddtrace/contrib/ethon/multi_patch.rb +84 -0
  288. data/lib/ddtrace/contrib/ethon/patcher.rb +25 -0
  289. data/lib/ddtrace/contrib/excon/configuration/settings.rb +33 -0
  290. data/lib/ddtrace/contrib/excon/ext.rb +17 -0
  291. data/lib/ddtrace/contrib/excon/integration.rb +43 -0
  292. data/lib/ddtrace/contrib/excon/middleware.rb +47 -23
  293. data/lib/ddtrace/contrib/excon/patcher.rb +7 -30
  294. data/lib/ddtrace/contrib/extensions.rb +143 -0
  295. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +38 -0
  296. data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
  297. data/lib/ddtrace/contrib/faraday/ext.rb +17 -0
  298. data/lib/ddtrace/contrib/faraday/integration.rb +43 -0
  299. data/lib/ddtrace/contrib/faraday/middleware.rb +46 -29
  300. data/lib/ddtrace/contrib/faraday/patcher.rb +36 -56
  301. data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
  302. data/lib/ddtrace/contrib/grape/configuration/settings.rb +38 -0
  303. data/lib/ddtrace/contrib/grape/endpoint.rb +192 -120
  304. data/lib/ddtrace/contrib/grape/ext.rb +23 -0
  305. data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
  306. data/lib/ddtrace/contrib/grape/integration.rb +39 -0
  307. data/lib/ddtrace/contrib/grape/patcher.rb +15 -59
  308. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +32 -0
  309. data/lib/ddtrace/contrib/graphql/ext.rb +16 -0
  310. data/lib/ddtrace/contrib/graphql/integration.rb +39 -0
  311. data/lib/ddtrace/contrib/graphql/patcher.rb +37 -34
  312. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +30 -0
  313. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +36 -27
  314. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +17 -8
  315. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +20 -5
  316. data/lib/ddtrace/contrib/grpc/ext.rb +18 -0
  317. data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
  318. data/lib/ddtrace/contrib/grpc/patcher.rb +8 -38
  319. data/lib/ddtrace/contrib/http/circuit_breaker.rb +37 -0
  320. data/lib/ddtrace/contrib/http/configuration/settings.rb +32 -0
  321. data/lib/ddtrace/contrib/http/ext.rb +17 -0
  322. data/lib/ddtrace/contrib/http/instrumentation.rb +179 -0
  323. data/lib/ddtrace/contrib/http/integration.rb +45 -0
  324. data/lib/ddtrace/contrib/http/patcher.rb +9 -144
  325. data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
  326. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
  327. data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
  328. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
  329. data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
  330. data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
  331. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
  332. data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
  333. data/lib/ddtrace/contrib/httprb/instrumentation.rb +157 -0
  334. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  335. data/lib/ddtrace/contrib/httprb/patcher.rb +38 -0
  336. data/lib/ddtrace/contrib/integration.rb +16 -0
  337. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
  338. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  339. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  340. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  341. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  342. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  343. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  344. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  345. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  346. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  347. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  348. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  349. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  350. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  351. data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
  352. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  353. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  354. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +33 -0
  355. data/lib/ddtrace/contrib/mongodb/ext.rb +23 -0
  356. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +69 -0
  357. data/lib/ddtrace/contrib/mongodb/integration.rb +38 -0
  358. data/lib/ddtrace/contrib/mongodb/patcher.rb +11 -74
  359. data/lib/ddtrace/contrib/mongodb/subscribers.rb +57 -18
  360. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +30 -0
  361. data/lib/ddtrace/contrib/mysql2/ext.rb +18 -0
  362. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +64 -0
  363. data/lib/ddtrace/contrib/mysql2/integration.rb +38 -0
  364. data/lib/ddtrace/contrib/mysql2/patcher.rb +9 -25
  365. data/lib/ddtrace/contrib/patchable.rb +70 -0
  366. data/lib/ddtrace/contrib/patcher.rb +65 -0
  367. data/lib/ddtrace/contrib/presto/configuration/settings.rb +30 -0
  368. data/lib/ddtrace/contrib/presto/ext.rb +28 -0
  369. data/lib/ddtrace/contrib/presto/instrumentation.rb +110 -0
  370. data/lib/ddtrace/contrib/presto/integration.rb +38 -0
  371. data/lib/ddtrace/contrib/presto/patcher.rb +33 -0
  372. data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
  373. data/lib/ddtrace/contrib/qless/ext.rb +20 -0
  374. data/lib/ddtrace/contrib/qless/integration.rb +38 -0
  375. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  376. data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
  377. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
  378. data/lib/ddtrace/contrib/que/configuration/settings.rb +43 -0
  379. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  380. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  381. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  382. data/lib/ddtrace/contrib/que/tracer.rb +57 -0
  383. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +30 -0
  384. data/lib/ddtrace/contrib/racecar/event.rb +22 -7
  385. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  386. data/lib/ddtrace/contrib/racecar/events/batch.rb +2 -2
  387. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  388. data/lib/ddtrace/contrib/racecar/events/message.rb +2 -2
  389. data/lib/ddtrace/contrib/racecar/ext.rb +25 -0
  390. data/lib/ddtrace/contrib/racecar/integration.rb +39 -0
  391. data/lib/ddtrace/contrib/racecar/patcher.rb +11 -42
  392. data/lib/ddtrace/contrib/rack/configuration/settings.rb +46 -0
  393. data/lib/ddtrace/contrib/rack/ext.rb +21 -0
  394. data/lib/ddtrace/contrib/rack/integration.rb +45 -0
  395. data/lib/ddtrace/contrib/rack/middlewares.rb +105 -54
  396. data/lib/ddtrace/contrib/rack/patcher.rb +65 -49
  397. data/lib/ddtrace/contrib/rack/request_queue.rb +17 -7
  398. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  399. data/lib/ddtrace/contrib/rails/configuration/settings.rb +93 -0
  400. data/lib/ddtrace/contrib/rails/ext.rb +17 -0
  401. data/lib/ddtrace/contrib/rails/framework.rb +82 -33
  402. data/lib/ddtrace/contrib/rails/integration.rb +44 -0
  403. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  404. data/lib/ddtrace/contrib/rails/middlewares.rb +8 -2
  405. data/lib/ddtrace/contrib/rails/patcher.rb +88 -34
  406. data/lib/ddtrace/contrib/rails/railtie.rb +5 -9
  407. data/lib/ddtrace/contrib/rails/utils.rb +7 -31
  408. data/lib/ddtrace/contrib/rake/configuration/settings.rb +31 -0
  409. data/lib/ddtrace/contrib/rake/ext.rb +21 -0
  410. data/lib/ddtrace/contrib/rake/instrumentation.rb +33 -13
  411. data/lib/ddtrace/contrib/rake/integration.rb +38 -0
  412. data/lib/ddtrace/contrib/rake/patcher.rb +10 -33
  413. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +45 -0
  414. data/lib/ddtrace/contrib/redis/configuration/settings.rb +35 -0
  415. data/lib/ddtrace/contrib/redis/ext.rb +22 -0
  416. data/lib/ddtrace/contrib/redis/integration.rb +42 -0
  417. data/lib/ddtrace/contrib/redis/patcher.rb +58 -53
  418. data/lib/ddtrace/contrib/redis/quantize.rb +47 -1
  419. data/lib/ddtrace/contrib/redis/tags.rb +33 -7
  420. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  421. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +158 -0
  422. data/lib/ddtrace/contrib/registerable.rb +33 -0
  423. data/lib/ddtrace/contrib/registry.rb +42 -0
  424. data/lib/ddtrace/contrib/resque/configuration/settings.rb +32 -0
  425. data/lib/ddtrace/contrib/resque/ext.rb +17 -0
  426. data/lib/ddtrace/contrib/resque/integration.rb +47 -0
  427. data/lib/ddtrace/contrib/resque/patcher.rb +16 -38
  428. data/lib/ddtrace/contrib/resque/resque_job.rb +61 -20
  429. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +31 -0
  430. data/lib/ddtrace/contrib/rest_client/ext.rb +17 -0
  431. data/lib/ddtrace/contrib/rest_client/integration.rb +38 -0
  432. data/lib/ddtrace/contrib/rest_client/patcher.rb +23 -0
  433. data/lib/ddtrace/contrib/rest_client/request_patch.rb +91 -0
  434. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
  435. data/lib/ddtrace/contrib/rspec/example.rb +75 -0
  436. data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
  437. data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
  438. data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
  439. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +28 -0
  440. data/lib/ddtrace/contrib/sequel/database.rb +9 -4
  441. data/lib/ddtrace/contrib/sequel/dataset.rb +7 -3
  442. data/lib/ddtrace/contrib/sequel/ext.rb +19 -0
  443. data/lib/ddtrace/contrib/sequel/integration.rb +38 -0
  444. data/lib/ddtrace/contrib/sequel/patcher.rb +6 -29
  445. data/lib/ddtrace/contrib/sequel/utils.rb +60 -14
  446. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +30 -0
  447. data/lib/ddtrace/contrib/shoryuken/ext.rb +21 -0
  448. data/lib/ddtrace/contrib/shoryuken/integration.rb +39 -0
  449. data/lib/ddtrace/contrib/shoryuken/patcher.rb +24 -0
  450. data/lib/ddtrace/contrib/shoryuken/tracer.rb +51 -0
  451. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
  452. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +37 -0
  453. data/lib/ddtrace/contrib/sidekiq/ext.rb +27 -0
  454. data/lib/ddtrace/contrib/sidekiq/integration.rb +38 -0
  455. data/lib/ddtrace/contrib/sidekiq/patcher.rb +22 -14
  456. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +65 -0
  457. data/lib/ddtrace/contrib/sidekiq/tracing.rb +44 -0
  458. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +39 -0
  459. data/lib/ddtrace/contrib/sinatra/env.rb +27 -9
  460. data/lib/ddtrace/contrib/sinatra/ext.rb +27 -0
  461. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  462. data/lib/ddtrace/contrib/sinatra/integration.rb +38 -0
  463. data/lib/ddtrace/contrib/sinatra/patcher.rb +28 -0
  464. data/lib/ddtrace/contrib/sinatra/tracer.rb +79 -65
  465. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +60 -16
  466. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +33 -0
  467. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  468. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  469. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  470. data/lib/ddtrace/contrib/sneakers/tracer.rb +53 -0
  471. data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
  472. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +30 -0
  473. data/lib/ddtrace/contrib/sucker_punch/ext.rb +21 -0
  474. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +29 -5
  475. data/lib/ddtrace/contrib/sucker_punch/integration.rb +38 -0
  476. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +21 -33
  477. data/lib/ddtrace/correlation.rb +39 -0
  478. data/lib/ddtrace/diagnostics/environment_logger.rb +279 -0
  479. data/lib/ddtrace/diagnostics/health.rb +33 -0
  480. data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
  481. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
  482. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
  483. data/lib/ddtrace/distributed_tracing/headers/headers.rb +71 -0
  484. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +43 -0
  485. data/lib/ddtrace/encoding.rb +36 -32
  486. data/lib/ddtrace/environment.rb +41 -0
  487. data/lib/ddtrace/event.rb +52 -0
  488. data/lib/ddtrace/ext/analytics.rb +12 -0
  489. data/lib/ddtrace/ext/app_types.rb +1 -0
  490. data/lib/ddtrace/ext/ci.rb +297 -0
  491. data/lib/ddtrace/ext/correlation.rb +11 -0
  492. data/lib/ddtrace/ext/diagnostics.rb +36 -0
  493. data/lib/ddtrace/ext/distributed.rb +22 -0
  494. data/lib/ddtrace/ext/environment.rb +16 -0
  495. data/lib/ddtrace/ext/forced_tracing.rb +25 -0
  496. data/lib/ddtrace/ext/git.rb +11 -0
  497. data/lib/ddtrace/ext/http.rb +4 -2
  498. data/lib/ddtrace/ext/integration.rb +8 -0
  499. data/lib/ddtrace/ext/manual_tracing.rb +9 -0
  500. data/lib/ddtrace/ext/metrics.rb +15 -0
  501. data/lib/ddtrace/ext/net.rb +2 -0
  502. data/lib/ddtrace/ext/runtime.rb +30 -0
  503. data/lib/ddtrace/ext/sampling.rb +16 -0
  504. data/lib/ddtrace/ext/test.rb +24 -0
  505. data/lib/ddtrace/ext/transport.rb +18 -0
  506. data/lib/ddtrace/forced_tracing.rb +38 -0
  507. data/lib/ddtrace/logger.rb +5 -4
  508. data/lib/ddtrace/metrics.rb +226 -0
  509. data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
  510. data/lib/ddtrace/opentelemetry/span.rb +33 -0
  511. data/lib/ddtrace/opentracer.rb +40 -0
  512. data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
  513. data/lib/ddtrace/opentracer/carrier.rb +6 -0
  514. data/lib/ddtrace/opentracer/distributed_headers.rb +55 -0
  515. data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
  516. data/lib/ddtrace/opentracer/propagator.rb +22 -0
  517. data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
  518. data/lib/ddtrace/opentracer/scope.rb +15 -0
  519. data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
  520. data/lib/ddtrace/opentracer/span.rb +94 -0
  521. data/lib/ddtrace/opentracer/span_context.rb +14 -0
  522. data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
  523. data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
  524. data/lib/ddtrace/opentracer/thread_local_scope.rb +31 -0
  525. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
  526. data/lib/ddtrace/opentracer/tracer.rb +208 -0
  527. data/lib/ddtrace/patcher.rb +33 -5
  528. data/lib/ddtrace/pin.rb +35 -20
  529. data/lib/ddtrace/pipeline.rb +1 -1
  530. data/lib/ddtrace/pipeline/span_filter.rb +15 -15
  531. data/lib/ddtrace/propagation/grpc_propagator.rb +26 -6
  532. data/lib/ddtrace/propagation/http_propagator.rb +72 -10
  533. data/lib/ddtrace/quantization/http.rb +1 -0
  534. data/lib/ddtrace/runtime/cgroup.rb +44 -0
  535. data/lib/ddtrace/runtime/class_count.rb +17 -0
  536. data/lib/ddtrace/runtime/container.rb +71 -0
  537. data/lib/ddtrace/runtime/gc.rb +16 -0
  538. data/lib/ddtrace/runtime/identity.rb +48 -0
  539. data/lib/ddtrace/runtime/metrics.rb +114 -0
  540. data/lib/ddtrace/runtime/object_space.rb +19 -0
  541. data/lib/ddtrace/runtime/socket.rb +14 -0
  542. data/lib/ddtrace/runtime/thread_count.rb +16 -0
  543. data/lib/ddtrace/sampler.rb +218 -37
  544. data/lib/ddtrace/sampling.rb +2 -0
  545. data/lib/ddtrace/sampling/matcher.rb +57 -0
  546. data/lib/ddtrace/sampling/rate_limiter.rb +176 -0
  547. data/lib/ddtrace/sampling/rule.rb +61 -0
  548. data/lib/ddtrace/sampling/rule_sampler.rb +126 -0
  549. data/lib/ddtrace/span.rb +244 -34
  550. data/lib/ddtrace/sync_writer.rb +47 -16
  551. data/lib/ddtrace/tracer.rb +215 -117
  552. data/lib/ddtrace/transport/http.rb +113 -0
  553. data/lib/ddtrace/transport/http/adapters/net.rb +145 -0
  554. data/lib/ddtrace/transport/http/adapters/registry.rb +25 -0
  555. data/lib/ddtrace/transport/http/adapters/test.rb +83 -0
  556. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +66 -0
  557. data/lib/ddtrace/transport/http/api.rb +46 -0
  558. data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
  559. data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
  560. data/lib/ddtrace/transport/http/api/instance.rb +33 -0
  561. data/lib/ddtrace/transport/http/api/map.rb +14 -0
  562. data/lib/ddtrace/transport/http/api/spec.rb +15 -0
  563. data/lib/ddtrace/transport/http/builder.rb +169 -0
  564. data/lib/ddtrace/transport/http/client.rb +50 -0
  565. data/lib/ddtrace/transport/http/env.rb +56 -0
  566. data/lib/ddtrace/transport/http/response.rb +26 -0
  567. data/lib/ddtrace/transport/http/statistics.rb +43 -0
  568. data/lib/ddtrace/transport/http/traces.rb +142 -0
  569. data/lib/ddtrace/transport/io.rb +26 -0
  570. data/lib/ddtrace/transport/io/client.rb +76 -0
  571. data/lib/ddtrace/transport/io/response.rb +23 -0
  572. data/lib/ddtrace/transport/io/traces.rb +97 -0
  573. data/lib/ddtrace/transport/parcel.rb +13 -0
  574. data/lib/ddtrace/transport/request.rb +13 -0
  575. data/lib/ddtrace/transport/response.rb +60 -0
  576. data/lib/ddtrace/transport/statistics.rb +72 -0
  577. data/lib/ddtrace/transport/traces.rb +205 -0
  578. data/lib/ddtrace/utils.rb +17 -14
  579. data/lib/ddtrace/utils/compression.rb +27 -0
  580. data/lib/ddtrace/utils/database.rb +7 -3
  581. data/lib/ddtrace/utils/forking.rb +52 -0
  582. data/lib/ddtrace/utils/object_set.rb +41 -0
  583. data/lib/ddtrace/utils/only_once.rb +40 -0
  584. data/lib/ddtrace/utils/sequence.rb +17 -0
  585. data/lib/ddtrace/utils/string_table.rb +45 -0
  586. data/lib/ddtrace/utils/time.rb +45 -0
  587. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  588. data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
  589. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  590. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  591. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  592. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  593. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  594. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  595. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  596. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  597. data/lib/ddtrace/version.rb +3 -1
  598. data/lib/ddtrace/worker.rb +20 -0
  599. data/lib/ddtrace/workers.rb +39 -40
  600. data/lib/ddtrace/workers/async.rb +173 -0
  601. data/lib/ddtrace/workers/loop.rb +119 -0
  602. data/lib/ddtrace/workers/polling.rb +49 -0
  603. data/lib/ddtrace/workers/queue.rb +40 -0
  604. data/lib/ddtrace/workers/runtime_metrics.rb +51 -0
  605. data/lib/ddtrace/workers/trace_writer.rb +202 -0
  606. data/lib/ddtrace/writer.rb +121 -57
  607. data/tasks/release_gem.rake +28 -0
  608. metadata +501 -211
  609. data/lib/ddtrace/configurable.rb +0 -83
  610. data/lib/ddtrace/configuration/proxy.rb +0 -25
  611. data/lib/ddtrace/contrib/base.rb +0 -15
  612. data/lib/ddtrace/contrib/mysql2/client.rb +0 -60
  613. data/lib/ddtrace/contrib/rails/action_controller.rb +0 -91
  614. data/lib/ddtrace/contrib/rails/action_controller_patch.rb +0 -77
  615. data/lib/ddtrace/contrib/rails/action_view.rb +0 -19
  616. data/lib/ddtrace/contrib/rails/active_support.rb +0 -65
  617. data/lib/ddtrace/contrib/rails/core_extensions.rb +0 -356
  618. data/lib/ddtrace/contrib/sidekiq/tracer.rb +0 -72
  619. data/lib/ddtrace/ext/cache.rb +0 -8
  620. data/lib/ddtrace/ext/grpc.rb +0 -7
  621. data/lib/ddtrace/ext/mongo.rb +0 -12
  622. data/lib/ddtrace/ext/redis.rb +0 -17
  623. data/lib/ddtrace/monkey.rb +0 -65
  624. data/lib/ddtrace/propagation/distributed_headers.rb +0 -48
  625. data/lib/ddtrace/provider.rb +0 -21
  626. data/lib/ddtrace/registry.rb +0 -42
  627. data/lib/ddtrace/registry/registerable.rb +0 -20
  628. data/lib/ddtrace/transport.rb +0 -212
@@ -17,7 +17,7 @@ module Datadog
17
17
  end
18
18
 
19
19
  def tracer
20
- configuration[:tracer]
20
+ -> { configuration[:tracer] }
21
21
  end
22
22
 
23
23
  def configuration
@@ -1,3 +1,5 @@
1
+ require 'ddtrace/contrib/analytics'
2
+ require 'ddtrace/contrib/active_record/ext'
1
3
  require 'ddtrace/contrib/active_record/event'
2
4
 
3
5
  module Datadog
@@ -9,8 +11,6 @@ module Datadog
9
11
  include ActiveRecord::Event
10
12
 
11
13
  EVENT_NAME = 'instantiation.active_record'.freeze
12
- SPAN_NAME = 'active_record.instantiation'.freeze
13
- DEFAULT_SERVICE_NAME = 'active_record'.freeze
14
14
 
15
15
  module_function
16
16
 
@@ -24,7 +24,7 @@ module Datadog
24
24
  end
25
25
 
26
26
  def span_name
27
- self::SPAN_NAME
27
+ Ext::SPAN_INSTANTIATION
28
28
  end
29
29
 
30
30
  def process(span, event, _id, payload)
@@ -34,15 +34,24 @@ module Datadog
34
34
  elsif span.parent
35
35
  span.parent.service
36
36
  else
37
- self::DEFAULT_SERVICE_NAME
37
+ Ext::SERVICE_NAME
38
38
  end
39
39
 
40
40
  span.resource = payload.fetch(:class_name)
41
- span.span_type = 'custom'
42
- span.set_tag('active_record.instantiation.class_name', payload.fetch(:class_name))
43
- span.set_tag('active_record.instantiation.record_count', payload.fetch(:record_count))
41
+ span.span_type = Ext::SPAN_TYPE_INSTANTIATION
42
+
43
+ # Set analytics sample rate
44
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
45
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
46
+ end
47
+
48
+ # Measure service stats
49
+ Contrib::Analytics.set_measured(span)
50
+
51
+ span.set_tag(Ext::TAG_INSTANTIATION_CLASS_NAME, payload.fetch(:class_name))
52
+ span.set_tag(Ext::TAG_INSTANTIATION_RECORD_COUNT, payload.fetch(:record_count))
44
53
  rescue StandardError => e
45
- Datadog::Tracer.log.debug(e.message)
54
+ Datadog.logger.debug(e.message)
46
55
  end
47
56
  end
48
57
  end
@@ -1,3 +1,7 @@
1
+ require 'ddtrace/ext/integration'
2
+ require 'ddtrace/ext/net'
3
+ require 'ddtrace/contrib/analytics'
4
+ require 'ddtrace/contrib/active_record/ext'
1
5
  require 'ddtrace/contrib/active_record/event'
2
6
 
3
7
  module Datadog
@@ -9,7 +13,7 @@ module Datadog
9
13
  include ActiveRecord::Event
10
14
 
11
15
  EVENT_NAME = 'sql.active_record'.freeze
12
- SPAN_NAME = 'active_record.sql'.freeze
16
+ PAYLOAD_CACHE = 'CACHE'.freeze
13
17
 
14
18
  module_function
15
19
 
@@ -18,28 +22,44 @@ module Datadog
18
22
  end
19
23
 
20
24
  def span_name
21
- self::SPAN_NAME
25
+ Ext::SPAN_SQL
22
26
  end
23
27
 
24
28
  def process(span, event, _id, payload)
25
- connection_config = Utils.connection_config(payload[:connection_id])
26
- span.name = "#{connection_config[:adapter_name]}.query"
27
- span.service = configuration[:service_name]
29
+ config = Utils.connection_config(payload[:connection], payload[:connection_id])
30
+ settings = Datadog.configuration[:active_record, config]
31
+ adapter_name = Datadog::Utils::Database.normalize_vendor(config[:adapter])
32
+ service_name = if settings.service_name != Datadog::Utils::Database::VENDOR_DEFAULT
33
+ settings.service_name
34
+ else
35
+ adapter_name
36
+ end
37
+
38
+ span.name = "#{adapter_name}.query"
39
+ span.service = service_name
28
40
  span.resource = payload.fetch(:sql)
29
41
  span.span_type = Datadog::Ext::SQL::TYPE
30
42
 
43
+ # Tag as an external peer service
44
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
45
+
46
+ # Set analytics sample rate
47
+ if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
48
+ Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
49
+ end
50
+
31
51
  # Find out if the SQL query has been cached in this request. This meta is really
32
52
  # helpful to users because some spans may have 0ns of duration because the query
33
53
  # is simply cached from memory, so the notification is fired with start == finish.
34
- cached = payload[:cached] || (payload[:name] == 'CACHE')
54
+ cached = payload[:cached] || (payload[:name] == PAYLOAD_CACHE)
35
55
 
36
- span.set_tag('active_record.db.vendor', connection_config[:adapter_name])
37
- span.set_tag('active_record.db.name', connection_config[:database_name])
38
- span.set_tag('active_record.db.cached', cached) if cached
39
- span.set_tag('out.host', connection_config[:adapter_host])
40
- span.set_tag('out.port', connection_config[:adapter_port])
56
+ span.set_tag(Ext::TAG_DB_VENDOR, adapter_name)
57
+ span.set_tag(Ext::TAG_DB_NAME, config[:database])
58
+ span.set_tag(Ext::TAG_DB_CACHED, cached) if cached
59
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, config[:host]) if config[:host]
60
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, config[:port]) if config[:port]
41
61
  rescue StandardError => e
42
- Datadog::Tracer.log.debug(e.message)
62
+ Datadog.logger.debug(e.message)
43
63
  end
44
64
  end
45
65
  end
@@ -0,0 +1,24 @@
1
+ module Datadog
2
+ module Contrib
3
+ module ActiveRecord
4
+ # ActiveRecord integration constants
5
+ module Ext
6
+ APP = 'active_record'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_ACTIVE_RECORD_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_ACTIVE_RECORD_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_ACTIVE_RECORD_ANALYTICS_SAMPLE_RATE'.freeze
12
+ SERVICE_NAME = 'active_record'.freeze
13
+ SPAN_INSTANTIATION = 'active_record.instantiation'.freeze
14
+ SPAN_SQL = 'active_record.sql'.freeze
15
+ SPAN_TYPE_INSTANTIATION = 'custom'.freeze
16
+ TAG_DB_CACHED = 'active_record.db.cached'.freeze
17
+ TAG_DB_NAME = 'active_record.db.name'.freeze
18
+ TAG_DB_VENDOR = 'active_record.db.vendor'.freeze
19
+ TAG_INSTANTIATION_CLASS_NAME = 'active_record.instantiation.class_name'.freeze
20
+ TAG_INSTANTIATION_RECORD_COUNT = 'active_record.instantiation.record_count'.freeze
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,53 @@
1
+ require 'ddtrace/ext/sql'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/integration'
4
+ require 'ddtrace/contrib/active_record/events'
5
+ require 'ddtrace/contrib/active_record/configuration/resolver'
6
+ require 'ddtrace/contrib/active_record/configuration/settings'
7
+ require 'ddtrace/contrib/active_record/patcher'
8
+ require 'ddtrace/contrib/rails/utils'
9
+
10
+ module Datadog
11
+ module Contrib
12
+ module ActiveRecord
13
+ # Describes the ActiveRecord integration
14
+ class Integration
15
+ include Contrib::Integration
16
+
17
+ MINIMUM_VERSION = Gem::Version.new('3.0')
18
+
19
+ register_as :active_record, auto_patch: false
20
+
21
+ def self.version
22
+ Gem.loaded_specs['activerecord'] && Gem.loaded_specs['activerecord'].version
23
+ end
24
+
25
+ def self.loaded?
26
+ !defined?(::ActiveRecord).nil?
27
+ end
28
+
29
+ def self.compatible?
30
+ super && version >= MINIMUM_VERSION
31
+ end
32
+
33
+ # enabled by rails integration so should only auto instrument
34
+ # if detected that it is being used without rails
35
+ def auto_instrument?
36
+ !Datadog::Contrib::Rails::Utils.railtie_supported?
37
+ end
38
+
39
+ def default_configuration
40
+ Configuration::Settings.new
41
+ end
42
+
43
+ def patcher
44
+ ActiveRecord::Patcher
45
+ end
46
+
47
+ def resolver
48
+ @resolver ||= Configuration::Resolver.new
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,6 +1,4 @@
1
- require 'ddtrace/ext/sql'
2
- require 'ddtrace/ext/app_types'
3
- require 'ddtrace/contrib/active_record/utils'
1
+ require 'ddtrace/contrib/patcher'
4
2
  require 'ddtrace/contrib/active_record/events'
5
3
 
6
4
  module Datadog
@@ -8,44 +6,16 @@ module Datadog
8
6
  module ActiveRecord
9
7
  # Patcher enables patching of 'active_record' module.
10
8
  module Patcher
11
- include Base
12
-
13
- register_as :active_record, auto_patch: false
14
- option :service_name, depends_on: [:tracer] do |value|
15
- (value || Utils.adapter_name).tap do |v|
16
- get_option(:tracer).set_service_info(v, 'active_record', Ext::AppTypes::DB)
17
- end
18
- end
19
- option :orm_service_name
20
- option :tracer, default: Datadog.tracer do |value|
21
- (value || Datadog.tracer).tap do |v|
22
- # Make sure to update tracers of all subscriptions
23
- Events.subscriptions.each do |subscription|
24
- subscription.tracer = v
25
- end
26
- end
27
- end
28
-
29
- @patched = false
9
+ include Contrib::Patcher
30
10
 
31
11
  module_function
32
12
 
33
- # patched? tells whether patch has been successfully applied
34
- def patched?
35
- @patched
13
+ def target_version
14
+ Integration.version
36
15
  end
37
16
 
38
17
  def patch
39
- if !@patched && defined?(::ActiveRecord)
40
- begin
41
- Events.subscribe!
42
- @patched = true
43
- rescue StandardError => e
44
- Datadog::Tracer.log.error("Unable to apply Active Record integration: #{e}")
45
- end
46
- end
47
-
48
- @patched
18
+ Events.subscribe!
49
19
  end
50
20
  end
51
21
  end
@@ -1,57 +1,102 @@
1
+ require 'ddtrace/ext/runtime'
2
+
1
3
  module Datadog
2
4
  module Contrib
3
5
  module ActiveRecord
4
6
  # Common utilities for Rails
5
7
  module Utils
8
+ EMPTY_CONFIG = {}.freeze
9
+
6
10
  def self.adapter_name
7
- connection_config[:adapter_name]
11
+ Datadog::Utils::Database.normalize_vendor(connection_config[:adapter])
8
12
  end
9
13
 
10
14
  def self.database_name
11
- connection_config[:database_name]
15
+ connection_config[:database]
12
16
  end
13
17
 
14
18
  def self.adapter_host
15
- connection_config[:adapter_host]
19
+ connection_config[:host]
16
20
  end
17
21
 
18
22
  def self.adapter_port
19
- connection_config[:adapter_port]
20
- end
21
-
22
- def self.connection_config(object_id = nil)
23
- config = object_id.nil? ? default_connection_config : connection_config_by_id(object_id)
24
- {
25
- adapter_name: Datadog::Utils::Database.normalize_vendor(config[:adapter]),
26
- adapter_host: config[:host],
27
- adapter_port: config[:port],
28
- database_name: config[:database]
29
- }
23
+ connection_config[:port]
30
24
  end
31
25
 
32
- # Attempt to retrieve the connection from an object ID.
33
- def self.connection_by_id(object_id)
34
- return nil if object_id.nil?
35
- ObjectSpace._id2ref(object_id)
36
- rescue StandardError
37
- nil
38
- end
26
+ # Returns the connection configuration hash from the
27
+ # current connection
28
+ #
29
+ # Since Rails 6.0, we have direct access to the object,
30
+ # while older versions of Rails only provide us the
31
+ # connection id.
32
+ #
33
+ # @see https://github.com/rails/rails/pull/34602
34
+ def self.connection_config(connection = nil, connection_id = nil)
35
+ return default_connection_config if connection.nil? && connection_id.nil?
39
36
 
40
- # Attempt to retrieve the connection config from an object ID.
41
- # Typical of ActiveSupport::Notifications `sql.active_record`
42
- def self.connection_config_by_id(object_id)
43
- connection = connection_by_id(object_id)
44
- return {} if connection.nil?
37
+ conn = if !connection.nil?
38
+ # Since Rails 6.0, the connection object
39
+ # is directly available.
40
+ connection
41
+ else
42
+ # For Rails < 6.0, only the `connection_id`
43
+ # is available. We have to find the connection
44
+ # object from it.
45
+ connection_from_id(connection_id)
46
+ end
45
47
 
46
- if connection.instance_variable_defined?(:@config)
47
- connection.instance_variable_get(:@config)
48
+ if conn && conn.instance_variable_defined?(:@config)
49
+ conn.instance_variable_get(:@config)
48
50
  else
49
- {}
51
+ EMPTY_CONFIG
50
52
  end
51
53
  end
52
54
 
55
+ # DEV: JRuby responds to {ObjectSpace._id2ref}, despite raising an error
56
+ # DEV: when invoked. Thus, we have to explicitly check for Ruby runtime.
57
+ if Datadog::Ext::Runtime::RUBY_ENGINE != 'jruby'
58
+ # CRuby has access to {ObjectSpace._id2ref}, which allows for
59
+ # direct look up of the connection object.
60
+ def self.connection_from_id(connection_id)
61
+ # `connection_id` is the `#object_id` of the
62
+ # connection. We can perform an ObjectSpace
63
+ # lookup to find it.
64
+ #
65
+ # This works not only for ActiveRecord, but for
66
+ # extensions that might have their own connection
67
+ # pool (e.g. https://rubygems.org/gems/makara).
68
+ ObjectSpace._id2ref(connection_id)
69
+ rescue => e
70
+ # Because `connection_id` references a live connection
71
+ # present in the current stack, it is very unlikely that
72
+ # `_id2ref` will fail, but we add this safeguard just
73
+ # in case.
74
+ Datadog.logger.debug(
75
+ "connection_id #{connection_id} does not represent a valid object. " \
76
+ "Cause: #{e.message} Source: #{e.backtrace.first}"
77
+ )
78
+ end
79
+ else
80
+ # JRuby does not enable {ObjectSpace._id2ref} by default,
81
+ # as it has large performance impact:
82
+ # https://github.com/jruby/jruby/wiki/PerformanceTuning/cf155dd9#dont-enable-objectspace
83
+ #
84
+ # This fallback code does not support the makara gem,
85
+ # as its connections don't live in the ActiveRecord
86
+ # connection pool.
87
+ def self.connection_from_id(connection_id)
88
+ ::ActiveRecord::Base
89
+ .connection_handler
90
+ .connection_pool_list
91
+ .flat_map(&:connections)
92
+ .find { |c| c.object_id == connection_id }
93
+ end
94
+ end
95
+
96
+ # @return [Hash]
53
97
  def self.default_connection_config
54
98
  return @default_connection_config if instance_variable_defined?(:@default_connection_config)
99
+
55
100
  current_connection_name = if ::ActiveRecord::Base.respond_to?(:connection_specification_name)
56
101
  ::ActiveRecord::Base.connection_specification_name
57
102
  else
@@ -59,9 +104,18 @@ module Datadog
59
104
  end
60
105
 
61
106
  connection_pool = ::ActiveRecord::Base.connection_handler.retrieve_connection_pool(current_connection_name)
62
- connection_pool.nil? ? {} : (@default_connection_config = connection_pool.spec.config)
107
+ connection_pool.nil? ? EMPTY_CONFIG : (@default_connection_config = db_config(connection_pool))
63
108
  rescue StandardError
64
- {}
109
+ EMPTY_CONFIG
110
+ end
111
+
112
+ # @return [Hash]
113
+ def self.db_config(connection_pool)
114
+ if ::Rails::VERSION::MAJOR >= 6 && ::Rails::VERSION::MINOR >= 1
115
+ connection_pool.db_config.configuration_hash
116
+ else
117
+ connection_pool.spec.config
118
+ end
65
119
  end
66
120
  end
67
121
  end
@@ -0,0 +1,258 @@
1
+ require 'ddtrace/contrib/active_support/ext'
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module ActiveSupport
6
+ module Cache
7
+ # Defines instrumentation for ActiveSupport caching
8
+ # rubocop:disable Lint/RescueException
9
+ module Instrumentation
10
+ module_function
11
+
12
+ def start_trace_cache(payload)
13
+ tracer = Datadog.configuration[:active_support][:tracer]
14
+
15
+ # In most of the cases Rails ``fetch()`` and ``read()`` calls are nested.
16
+ # This check ensures that two reads are not nested since they don't provide
17
+ # interesting details.
18
+ # NOTE: the ``finish_trace_cache()`` is fired but it already has a safe-guard
19
+ # to avoid any kind of issue.
20
+ current_span = tracer.active_span
21
+ return if current_span.try(:name) == Ext::SPAN_CACHE &&
22
+ (
23
+ payload[:action] == Ext::RESOURCE_CACHE_GET &&
24
+ current_span.try(:resource) == Ext::RESOURCE_CACHE_GET ||
25
+ payload[:action] == Ext::RESOURCE_CACHE_MGET &&
26
+ current_span.try(:resource) == Ext::RESOURCE_CACHE_MGET
27
+ )
28
+
29
+ tracing_context = payload.fetch(:tracing_context)
30
+
31
+ # create a new ``Span`` and add it to the tracing context
32
+ service = Datadog.configuration[:active_support][:cache_service]
33
+ type = Ext::SPAN_TYPE_CACHE
34
+ span = tracer.trace(Ext::SPAN_CACHE, service: service, span_type: type)
35
+ span.resource = payload.fetch(:action)
36
+ tracing_context[:dd_cache_span] = span
37
+ rescue StandardError => e
38
+ Datadog.logger.debug(e.message)
39
+ end
40
+
41
+ def finish_trace_cache(payload)
42
+ # retrieve the tracing context and continue the trace
43
+ tracing_context = payload.fetch(:tracing_context)
44
+ span = tracing_context[:dd_cache_span]
45
+ return unless span && !span.finished?
46
+
47
+ begin
48
+ # discard parameters from the cache_store configuration
49
+ if defined?(::Rails)
50
+ store, = *Array.wrap(::Rails.configuration.cache_store).flatten
51
+ span.set_tag(Ext::TAG_CACHE_BACKEND, store)
52
+ end
53
+
54
+ normalized_key = ::ActiveSupport::Cache.expand_cache_key(payload.fetch(:key))
55
+ cache_key = Datadog::Utils.truncate(normalized_key, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE)
56
+ span.set_tag(Ext::TAG_CACHE_KEY, cache_key)
57
+
58
+ span.set_error(payload[:exception]) if payload[:exception]
59
+ ensure
60
+ span.finish
61
+ end
62
+ rescue StandardError => e
63
+ Datadog.logger.debug(e.message)
64
+ end
65
+
66
+ def finish_trace_cache_multi(payload)
67
+ # retrieve the tracing context and continue the trace
68
+ tracing_context = payload.fetch(:tracing_context)
69
+ span = tracing_context[:dd_cache_span]
70
+ return unless span && !span.finished?
71
+
72
+ begin
73
+ # discard parameters from the cache_store configuration
74
+ if defined?(::Rails)
75
+ store, = *Array.wrap(::Rails.configuration.cache_store).flatten
76
+ span.set_tag(Ext::TAG_CACHE_BACKEND, store)
77
+ end
78
+ normalized_keys = payload.fetch(:keys, []).map do |key|
79
+ ::ActiveSupport::Cache.expand_cache_key(key)
80
+ end
81
+ cache_keys = Datadog::Utils.truncate(normalized_keys, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE)
82
+ span.set_tag(Ext::TAG_CACHE_KEY_MULTI, cache_keys)
83
+
84
+ span.set_error(payload[:exception]) if payload[:exception]
85
+ ensure
86
+ span.finish
87
+ end
88
+ rescue StandardError => e
89
+ Datadog.logger.debug(e.message)
90
+ end
91
+
92
+ # Defines instrumentation for ActiveSupport cache reading
93
+ module Read
94
+ def read(*args, &block)
95
+ payload = {
96
+ action: Ext::RESOURCE_CACHE_GET,
97
+ key: args[0],
98
+ tracing_context: {}
99
+ }
100
+
101
+ begin
102
+ # process and catch cache exceptions
103
+ Instrumentation.start_trace_cache(payload)
104
+ super
105
+ rescue Exception => e
106
+ payload[:exception] = [e.class.name, e.message]
107
+ payload[:exception_object] = e
108
+ raise e
109
+ end
110
+ ensure
111
+ Instrumentation.finish_trace_cache(payload)
112
+ end
113
+ end
114
+
115
+ # Defines instrumentation for ActiveSupport cache reading of multiple keys
116
+ module ReadMulti
117
+ def read_multi(*keys, &block)
118
+ payload = {
119
+ action: Ext::RESOURCE_CACHE_MGET,
120
+ keys: keys,
121
+ tracing_context: {}
122
+ }
123
+
124
+ begin
125
+ # process and catch cache exceptions
126
+ Instrumentation.start_trace_cache(payload)
127
+ super
128
+ rescue Exception => e
129
+ payload[:exception] = [e.class.name, e.message]
130
+ payload[:exception_object] = e
131
+ raise e
132
+ end
133
+ ensure
134
+ Instrumentation.finish_trace_cache_multi(payload)
135
+ end
136
+ end
137
+
138
+ # Defines instrumentation for ActiveSupport cache fetching
139
+ module Fetch
140
+ def fetch(*args, &block)
141
+ payload = {
142
+ action: Ext::RESOURCE_CACHE_GET,
143
+ key: args[0],
144
+ tracing_context: {}
145
+ }
146
+
147
+ begin
148
+ # process and catch cache exceptions
149
+ Instrumentation.start_trace_cache(payload)
150
+ super
151
+ rescue Exception => e
152
+ payload[:exception] = [e.class.name, e.message]
153
+ payload[:exception_object] = e
154
+ raise e
155
+ end
156
+ ensure
157
+ Instrumentation.finish_trace_cache(payload)
158
+ end
159
+ end
160
+
161
+ # Defines instrumentation for ActiveSupport cache fetching of multiple keys
162
+ module FetchMulti
163
+ def fetch_multi(*args, &block)
164
+ # extract options hash
165
+ keys = args[-1].instance_of?(Hash) ? args[0..-2] : args
166
+ payload = {
167
+ action: Ext::RESOURCE_CACHE_MGET,
168
+ keys: keys,
169
+ tracing_context: {}
170
+ }
171
+
172
+ begin
173
+ # process and catch cache exceptions
174
+ Instrumentation.start_trace_cache(payload)
175
+ super
176
+ rescue Exception => e
177
+ payload[:exception] = [e.class.name, e.message]
178
+ payload[:exception_object] = e
179
+ raise e
180
+ end
181
+ ensure
182
+ Instrumentation.finish_trace_cache_multi(payload)
183
+ end
184
+ end
185
+
186
+ # Defines instrumentation for ActiveSupport cache writing
187
+ module Write
188
+ def write(*args, &block)
189
+ payload = {
190
+ action: Ext::RESOURCE_CACHE_SET,
191
+ key: args[0],
192
+ tracing_context: {}
193
+ }
194
+
195
+ begin
196
+ # process and catch cache exceptions
197
+ Instrumentation.start_trace_cache(payload)
198
+ super
199
+ rescue Exception => e
200
+ payload[:exception] = [e.class.name, e.message]
201
+ payload[:exception_object] = e
202
+ raise e
203
+ end
204
+ ensure
205
+ Instrumentation.finish_trace_cache(payload)
206
+ end
207
+ end
208
+
209
+ # Defines instrumentation for ActiveSupport cache writing of multiple keys
210
+ module WriteMulti
211
+ def write_multi(hash, options = nil)
212
+ payload = {
213
+ action: Ext::RESOURCE_CACHE_MSET,
214
+ keys: hash.keys,
215
+ tracing_context: {}
216
+ }
217
+
218
+ begin
219
+ # process and catch cache exceptions
220
+ Instrumentation.start_trace_cache(payload)
221
+ super
222
+ rescue Exception => e
223
+ payload[:exception] = [e.class.name, e.message]
224
+ payload[:exception_object] = e
225
+ raise e
226
+ end
227
+ ensure
228
+ Instrumentation.finish_trace_cache_multi(payload)
229
+ end
230
+ end
231
+
232
+ # Defines instrumentation for ActiveSupport cache deleting
233
+ module Delete
234
+ def delete(*args, &block)
235
+ payload = {
236
+ action: Ext::RESOURCE_CACHE_DELETE,
237
+ key: args[0],
238
+ tracing_context: {}
239
+ }
240
+
241
+ begin
242
+ # process and catch cache exceptions
243
+ Instrumentation.start_trace_cache(payload)
244
+ super
245
+ rescue Exception => e
246
+ payload[:exception] = [e.class.name, e.message]
247
+ payload[:exception_object] = e
248
+ raise e
249
+ end
250
+ ensure
251
+ Instrumentation.finish_trace_cache(payload)
252
+ end
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end