ddtrace 0.42.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 (356) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +274 -137
  3. data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
  4. data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2-latest} +2 -1
  5. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
  6. data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
  7. data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
  8. data/.github/workflows/create-next-milestone.yml +20 -0
  9. data/.rubocop.yml +250 -7
  10. data/.rubocop_todo.yml +397 -0
  11. data/.simplecov +9 -0
  12. data/Appraisals +386 -142
  13. data/CHANGELOG.md +1218 -362
  14. data/CONTRIBUTING.md +1 -1
  15. data/Gemfile +55 -3
  16. data/LICENSE-3rdparty.csv +2 -0
  17. data/README.md +1 -0
  18. data/Rakefile +216 -29
  19. data/ddtrace.gemspec +4 -36
  20. data/docker-compose.yml +105 -7
  21. data/docs/DevelopmentGuide.md +30 -2
  22. data/docs/GettingStarted.md +242 -22
  23. data/integration/README.md +68 -0
  24. data/integration/apps/rack/.dockerignore +1 -0
  25. data/integration/apps/rack/.envrc.sample +1 -0
  26. data/integration/apps/rack/.gitignore +4 -0
  27. data/integration/apps/rack/.rspec +1 -0
  28. data/integration/apps/rack/Dockerfile +25 -0
  29. data/integration/apps/rack/Dockerfile-ci +11 -0
  30. data/integration/apps/rack/Gemfile +24 -0
  31. data/integration/apps/rack/README.md +93 -0
  32. data/integration/apps/rack/app/acme.rb +80 -0
  33. data/integration/apps/rack/app/datadog.rb +17 -0
  34. data/integration/apps/rack/bin/run +22 -0
  35. data/integration/apps/rack/bin/setup +17 -0
  36. data/integration/apps/rack/bin/test +24 -0
  37. data/integration/apps/rack/config.ru +6 -0
  38. data/integration/apps/rack/config/puma.rb +14 -0
  39. data/integration/apps/rack/config/unicorn.rb +23 -0
  40. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  41. data/integration/apps/rack/docker-compose.yml +78 -0
  42. data/integration/apps/rack/script/build-images +38 -0
  43. data/integration/apps/rack/script/ci +50 -0
  44. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  45. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  46. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  47. data/integration/apps/rails-five/.dockerignore +1 -0
  48. data/integration/apps/rails-five/.env +3 -0
  49. data/integration/apps/rails-five/.envrc.sample +1 -0
  50. data/integration/apps/rails-five/.gitignore +30 -0
  51. data/integration/apps/rails-five/Dockerfile +25 -0
  52. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  53. data/integration/apps/rails-five/Gemfile +104 -0
  54. data/integration/apps/rails-five/README.md +94 -0
  55. data/integration/apps/rails-five/Rakefile +6 -0
  56. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  57. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  58. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  59. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  60. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  61. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  62. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  63. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  64. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  65. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  66. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  67. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  68. data/integration/apps/rails-five/app/models/test.rb +2 -0
  69. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  70. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  71. data/integration/apps/rails-five/bin/bundle +3 -0
  72. data/integration/apps/rails-five/bin/rails +9 -0
  73. data/integration/apps/rails-five/bin/rake +9 -0
  74. data/integration/apps/rails-five/bin/run +24 -0
  75. data/integration/apps/rails-five/bin/setup +27 -0
  76. data/integration/apps/rails-five/bin/spring +17 -0
  77. data/integration/apps/rails-five/bin/test +21 -0
  78. data/integration/apps/rails-five/bin/update +28 -0
  79. data/integration/apps/rails-five/config.ru +5 -0
  80. data/integration/apps/rails-five/config/application.rb +97 -0
  81. data/integration/apps/rails-five/config/boot.rb +4 -0
  82. data/integration/apps/rails-five/config/cable.yml +10 -0
  83. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  84. data/integration/apps/rails-five/config/database.yml +28 -0
  85. data/integration/apps/rails-five/config/environment.rb +5 -0
  86. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  87. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  88. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  89. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  90. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  91. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  92. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  93. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  94. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  95. data/integration/apps/rails-five/config/puma.rb +24 -0
  96. data/integration/apps/rails-five/config/routes.rb +11 -0
  97. data/integration/apps/rails-five/config/spring.rb +6 -0
  98. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  99. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  100. data/integration/apps/rails-five/db/schema.rb +23 -0
  101. data/integration/apps/rails-five/db/seeds.rb +7 -0
  102. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  103. data/integration/apps/rails-five/docker-compose.yml +100 -0
  104. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  105. data/integration/apps/rails-five/log/.keep +0 -0
  106. data/integration/apps/rails-five/public/robots.txt +1 -0
  107. data/integration/apps/rails-five/script/build-images +35 -0
  108. data/integration/apps/rails-five/script/ci +50 -0
  109. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  110. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  111. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  112. data/integration/apps/rails-five/storage/.keep +0 -0
  113. data/integration/apps/rails-five/tmp/.keep +0 -0
  114. data/integration/apps/rails-five/vendor/.keep +0 -0
  115. data/integration/apps/ruby/.dockerignore +1 -0
  116. data/integration/apps/ruby/.envrc.sample +1 -0
  117. data/integration/apps/ruby/.gitignore +2 -0
  118. data/integration/apps/ruby/Dockerfile +25 -0
  119. data/integration/apps/ruby/Dockerfile-ci +11 -0
  120. data/integration/apps/ruby/Gemfile +11 -0
  121. data/integration/apps/ruby/README.md +70 -0
  122. data/integration/apps/ruby/agent.yaml +3 -0
  123. data/integration/apps/ruby/app/datadog.rb +13 -0
  124. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  125. data/integration/apps/ruby/bin/run +20 -0
  126. data/integration/apps/ruby/bin/setup +17 -0
  127. data/integration/apps/ruby/bin/test +21 -0
  128. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  129. data/integration/apps/ruby/docker-compose.yml +63 -0
  130. data/integration/apps/ruby/script/build-images +38 -0
  131. data/integration/apps/ruby/script/ci +50 -0
  132. data/integration/images/agent/Dockerfile +2 -0
  133. data/integration/images/agent/agent.yaml +3 -0
  134. data/integration/images/include/datadog/analyzer.rb +71 -0
  135. data/integration/images/include/datadog/demo_env.rb +101 -0
  136. data/integration/images/include/http-health-check +33 -0
  137. data/integration/images/ruby/2.0/Dockerfile +54 -0
  138. data/integration/images/ruby/2.1/Dockerfile +54 -0
  139. data/integration/images/ruby/2.2/Dockerfile +54 -0
  140. data/integration/images/ruby/2.3/Dockerfile +70 -0
  141. data/integration/images/ruby/2.4/Dockerfile +54 -0
  142. data/integration/images/ruby/2.5/Dockerfile +54 -0
  143. data/integration/images/ruby/2.6/Dockerfile +54 -0
  144. data/integration/images/ruby/2.7/Dockerfile +54 -0
  145. data/integration/images/ruby/3.0/Dockerfile +54 -0
  146. data/integration/images/wrk/Dockerfile +33 -0
  147. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  148. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  149. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  150. data/integration/script/build-images +43 -0
  151. data/lib/ddtrace.rb +10 -5
  152. data/lib/ddtrace/analytics.rb +2 -0
  153. data/lib/ddtrace/auto_instrument.rb +3 -0
  154. data/lib/ddtrace/auto_instrument_base.rb +6 -0
  155. data/lib/ddtrace/buffer.rb +4 -4
  156. data/lib/ddtrace/configuration.rb +108 -23
  157. data/lib/ddtrace/configuration/base.rb +1 -1
  158. data/lib/ddtrace/configuration/components.rb +2 -2
  159. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  160. data/lib/ddtrace/configuration/options.rb +4 -7
  161. data/lib/ddtrace/configuration/settings.rb +21 -5
  162. data/lib/ddtrace/context.rb +23 -6
  163. data/lib/ddtrace/context_provider.rb +12 -2
  164. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  165. data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
  166. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
  167. data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
  168. data/lib/ddtrace/contrib/action_view/event.rb +1 -5
  169. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
  170. data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
  171. data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
  172. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  173. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +101 -18
  174. data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
  175. data/lib/ddtrace/contrib/active_record/utils.rb +68 -21
  176. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
  177. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
  178. data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
  179. data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
  180. data/lib/ddtrace/contrib/active_support/notifications/event.rb +12 -1
  181. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  182. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  183. data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
  184. data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
  185. data/lib/ddtrace/contrib/aws/patcher.rb +1 -1
  186. data/lib/ddtrace/contrib/aws/services.rb +3 -0
  187. data/lib/ddtrace/contrib/configurable.rb +63 -37
  188. data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
  189. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -20
  190. data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
  191. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
  192. data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
  193. data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
  194. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
  195. data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
  196. data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
  197. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
  198. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
  199. data/lib/ddtrace/contrib/delayed_job/plugin.rb +2 -1
  200. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  201. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  202. data/lib/ddtrace/contrib/ethon/easy_patch.rb +11 -10
  203. data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
  204. data/lib/ddtrace/contrib/excon/middleware.rb +9 -7
  205. data/lib/ddtrace/contrib/extensions.rb +53 -3
  206. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  207. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
  208. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
  209. data/lib/ddtrace/contrib/grape/endpoint.rb +47 -21
  210. data/lib/ddtrace/contrib/grape/ext.rb +1 -0
  211. data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
  212. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  213. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  214. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
  215. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  216. data/lib/ddtrace/contrib/http/instrumentation.rb +7 -7
  217. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
  218. data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
  219. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
  220. data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
  221. data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
  222. data/lib/ddtrace/contrib/httprb/instrumentation.rb +15 -21
  223. data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
  224. data/lib/ddtrace/contrib/kafka/event.rb +1 -1
  225. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
  226. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  227. data/lib/ddtrace/contrib/patchable.rb +18 -7
  228. data/lib/ddtrace/contrib/patcher.rb +9 -6
  229. data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
  230. data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
  231. data/lib/ddtrace/contrib/qless/ext.rb +20 -0
  232. data/lib/ddtrace/contrib/qless/integration.rb +38 -0
  233. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  234. data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
  235. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
  236. data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
  237. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  238. data/lib/ddtrace/contrib/que/tracer.rb +3 -2
  239. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  240. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  241. data/lib/ddtrace/contrib/rack/integration.rb +7 -0
  242. data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
  243. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  244. data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
  245. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  246. data/lib/ddtrace/contrib/rails/patcher.rb +11 -4
  247. data/lib/ddtrace/contrib/rails/utils.rb +4 -0
  248. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
  249. data/lib/ddtrace/contrib/rake/integration.rb +1 -1
  250. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +14 -5
  251. data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
  252. data/lib/ddtrace/contrib/redis/ext.rb +1 -0
  253. data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
  254. data/lib/ddtrace/contrib/redis/quantize.rb +28 -0
  255. data/lib/ddtrace/contrib/redis/tags.rb +5 -1
  256. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  257. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  258. data/lib/ddtrace/contrib/registry.rb +2 -2
  259. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
  260. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  261. data/lib/ddtrace/contrib/resque/resque_job.rb +3 -1
  262. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
  263. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
  264. data/lib/ddtrace/contrib/rspec/example.rb +75 -0
  265. data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
  266. data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
  267. data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
  268. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  269. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  270. data/lib/ddtrace/contrib/shoryuken/tracer.rb +3 -1
  271. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
  272. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +5 -7
  273. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  274. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  275. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  276. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  277. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +5 -5
  278. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
  279. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  280. data/lib/ddtrace/contrib/sneakers/tracer.rb +16 -21
  281. data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
  282. data/lib/ddtrace/correlation.rb +1 -0
  283. data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
  284. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  285. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  286. data/lib/ddtrace/ext/app_types.rb +1 -0
  287. data/lib/ddtrace/ext/ci.rb +297 -0
  288. data/lib/ddtrace/ext/distributed.rb +8 -2
  289. data/lib/ddtrace/ext/git.rb +11 -0
  290. data/lib/ddtrace/ext/http.rb +1 -1
  291. data/lib/ddtrace/ext/runtime.rb +4 -1
  292. data/lib/ddtrace/ext/test.rb +24 -0
  293. data/lib/ddtrace/forced_tracing.rb +2 -0
  294. data/lib/ddtrace/logger.rb +1 -1
  295. data/lib/ddtrace/metrics.rb +10 -6
  296. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  297. data/lib/ddtrace/opentracer/span.rb +2 -6
  298. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  299. data/lib/ddtrace/patcher.rb +25 -4
  300. data/lib/ddtrace/pin.rb +8 -61
  301. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  302. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  303. data/lib/ddtrace/propagation/http_propagator.rb +17 -2
  304. data/lib/ddtrace/quantization/http.rb +1 -0
  305. data/lib/ddtrace/runtime/cgroup.rb +2 -2
  306. data/lib/ddtrace/runtime/container.rb +27 -29
  307. data/lib/ddtrace/runtime/identity.rb +12 -5
  308. data/lib/ddtrace/sampler.rb +1 -1
  309. data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
  310. data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
  311. data/lib/ddtrace/span.rb +7 -7
  312. data/lib/ddtrace/sync_writer.rb +12 -12
  313. data/lib/ddtrace/tracer.rb +21 -6
  314. data/lib/ddtrace/transport/http.rb +15 -8
  315. data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
  316. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  317. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  318. data/lib/ddtrace/transport/http/builder.rb +7 -1
  319. data/lib/ddtrace/transport/http/env.rb +8 -0
  320. data/lib/ddtrace/transport/http/traces.rb +2 -3
  321. data/lib/ddtrace/transport/io.rb +1 -1
  322. data/lib/ddtrace/transport/io/response.rb +1 -3
  323. data/lib/ddtrace/transport/io/traces.rb +6 -0
  324. data/lib/ddtrace/transport/traces.rb +18 -1
  325. data/lib/ddtrace/utils.rb +10 -11
  326. data/lib/ddtrace/utils/compression.rb +27 -0
  327. data/lib/ddtrace/utils/forking.rb +52 -0
  328. data/lib/ddtrace/utils/object_set.rb +41 -0
  329. data/lib/ddtrace/utils/only_once.rb +40 -0
  330. data/lib/ddtrace/utils/sequence.rb +17 -0
  331. data/lib/ddtrace/utils/string_table.rb +45 -0
  332. data/lib/ddtrace/utils/time.rb +32 -1
  333. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  334. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  335. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  336. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  337. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  338. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  339. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  340. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  341. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  342. data/lib/ddtrace/version.rb +1 -1
  343. data/lib/ddtrace/workers.rb +5 -0
  344. data/lib/ddtrace/workers/async.rb +11 -3
  345. data/lib/ddtrace/workers/loop.rb +17 -3
  346. data/lib/ddtrace/workers/polling.rb +1 -0
  347. data/lib/ddtrace/workers/queue.rb +1 -0
  348. data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
  349. data/lib/ddtrace/workers/trace_writer.rb +10 -10
  350. data/lib/ddtrace/writer.rb +26 -5
  351. metadata +186 -373
  352. data/lib/ddtrace/augmentation.rb +0 -13
  353. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  354. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  355. data/lib/ddtrace/augmentation/shim.rb +0 -102
  356. data/lib/ddtrace/monkey.rb +0 -58
@@ -1,7 +1,7 @@
1
1
  module Datadog
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 42
4
+ MINOR = 47
5
5
  PATCH = 0
6
6
  PRE = nil
7
7
 
@@ -67,9 +67,13 @@ module Datadog
67
67
  def start
68
68
  @mutex.synchronize do
69
69
  return if @run
70
+
70
71
  @run = true
71
72
  Datadog.logger.debug("Starting thread in the process: #{Process.pid}")
72
73
  @worker = Thread.new { perform }
74
+ @worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
75
+
76
+ nil
73
77
  end
74
78
  end
75
79
 
@@ -108,6 +112,7 @@ module Datadog
108
112
 
109
113
  @mutex.synchronize do
110
114
  return if !@run && @trace_buffer.empty?
115
+
111
116
  @shutdown.wait(@mutex, @back_off) if @run # do not wait when shutting down
112
117
  end
113
118
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  # Methods that must be prepended
19
19
  module PrependedMethods
20
20
  def perform(*args)
21
- start { self.result = super(*args) } unless started?
21
+ start_async { self.result = super(*args) } unless started?
22
22
  end
23
23
  end
24
24
 
@@ -31,11 +31,13 @@ module Datadog
31
31
 
32
32
  def join(timeout = nil)
33
33
  return true unless running?
34
+
34
35
  !worker.join(timeout).nil?
35
36
  end
36
37
 
37
38
  def terminate
38
39
  return false unless running?
40
+
39
41
  @run_async = false
40
42
  worker.terminate
41
43
  true
@@ -43,6 +45,7 @@ module Datadog
43
45
 
44
46
  def run_async?
45
47
  return false unless instance_variable_defined?(:@run_async)
48
+
46
49
  @run_async == true
47
50
  end
48
51
 
@@ -56,6 +59,7 @@ module Datadog
56
59
 
57
60
  def error?
58
61
  return false unless instance_variable_defined?(:@error)
62
+
59
63
  !@error.nil?
60
64
  end
61
65
 
@@ -101,9 +105,10 @@ module Datadog
101
105
  @worker ||= nil
102
106
  end
103
107
 
104
- def start(&block)
108
+ def start_async(&block)
105
109
  mutex.synchronize do
106
110
  return if running?
111
+
107
112
  if forked?
108
113
  case fork_policy
109
114
  when FORK_POLICY_STOP
@@ -121,7 +126,7 @@ module Datadog
121
126
  @run_async = true
122
127
  @pid = Process.pid
123
128
  @error = nil
124
- Datadog.logger.debug("Starting thread in the process: #{Process.pid}")
129
+ Datadog.logger.debug("Starting thread in the process: #{Process.pid} for: #{self}")
125
130
 
126
131
  @worker = ::Thread.new do
127
132
  begin
@@ -133,6 +138,9 @@ module Datadog
133
138
  raise
134
139
  end
135
140
  end
141
+ @worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
142
+
143
+ nil
136
144
  end
137
145
 
138
146
  def stop_fork
@@ -21,6 +21,7 @@ module Datadog
21
21
  def stop_loop
22
22
  mutex.synchronize do
23
23
  return false unless run_loop?
24
+
24
25
  @run_loop = false
25
26
  shutdown.signal
26
27
  end
@@ -34,6 +35,7 @@ module Datadog
34
35
 
35
36
  def run_loop?
36
37
  return false unless instance_variable_defined?(:@run_loop)
38
+
37
39
  @run_loop == true
38
40
  end
39
41
 
@@ -53,12 +55,21 @@ module Datadog
53
55
  @loop_wait_time ||= loop_base_interval
54
56
  end
55
57
 
58
+ def loop_wait_time=(value)
59
+ @loop_wait_time = value
60
+ end
61
+
62
+ def reset_loop_wait_time
63
+ self.loop_wait_time = loop_base_interval
64
+ end
65
+
66
+ # Should the loop "back off" when there's no work?
56
67
  def loop_back_off?
57
68
  false
58
69
  end
59
70
 
60
- def loop_back_off!(amount = nil)
61
- @loop_wait_time = amount || [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
71
+ def loop_back_off!
72
+ self.loop_wait_time = [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
62
73
  end
63
74
 
64
75
  protected
@@ -79,12 +90,14 @@ module Datadog
79
90
 
80
91
  loop do
81
92
  if work_pending?
93
+ # There's work to do...
82
94
  # Run the task
83
95
  yield
84
96
 
85
97
  # Reset the wait interval
86
- loop_back_off!(loop_base_interval)
98
+ reset_loop_wait_time if loop_back_off?
87
99
  elsif loop_back_off?
100
+ # There's no work to do...
88
101
  # Back off the wait interval a bit
89
102
  loop_back_off!
90
103
  end
@@ -92,6 +105,7 @@ module Datadog
92
105
  # Wait for an interval, unless shutdown has been signaled.
93
106
  mutex.synchronize do
94
107
  return unless run_loop? || work_pending?
108
+
95
109
  shutdown.wait(mutex, loop_wait_time) if run_loop?
96
110
  end
97
111
  end
@@ -35,6 +35,7 @@ module Datadog
35
35
 
36
36
  def enabled?
37
37
  return true unless instance_variable_defined?(:@enabled)
38
+
38
39
  @enabled
39
40
  end
40
41
 
@@ -26,6 +26,7 @@ module Datadog
26
26
  buffer.shift
27
27
  end
28
28
 
29
+ # Are there more items to be processed next?
29
30
  def work_pending?
30
31
  !buffer.empty?
31
32
  end
@@ -12,6 +12,10 @@ module Datadog
12
12
  extend Forwardable
13
13
  include Workers::Polling
14
14
 
15
+ # In seconds
16
+ DEFAULT_FLUSH_INTERVAL = 10
17
+ DEFAULT_BACK_OFF_MAX = 30
18
+
15
19
  attr_reader \
16
20
  :metrics
17
21
 
@@ -22,9 +26,9 @@ module Datadog
22
26
  self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
23
27
 
24
28
  # Workers::IntervalLoop settings
25
- self.interval = options[:interval] if options.key?(:interval)
26
- self.back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
27
- self.back_off_max = options[:back_off_max] if options.key?(:back_off_max)
29
+ self.loop_base_interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
30
+ self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
31
+ self.loop_back_off_max = options.fetch(:back_off_max, DEFAULT_BACK_OFF_MAX)
28
32
 
29
33
  self.enabled = options.fetch(:enabled, false)
30
34
  end
@@ -16,9 +16,7 @@ module Datadog
16
16
  def initialize(options = {})
17
17
  transport_options = options.fetch(:transport_options, {})
18
18
 
19
- if transport_options.is_a?(Proc)
20
- transport_options = { on_build: transport_options }
21
- end
19
+ transport_options = { on_build: transport_options } if transport_options.is_a?(Proc)
22
20
 
23
21
  transport_options[:hostname] = options[:hostname] if options.key?(:hostname)
24
22
  transport_options[:port] = options[:port] if options.key?(:port)
@@ -66,9 +64,7 @@ module Datadog
66
64
  next if trace.first.nil?
67
65
 
68
66
  hostname = Datadog::Runtime::Socket.hostname
69
- unless hostname.nil? || hostname.empty?
70
- trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
71
- end
67
+ trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
72
68
  end
73
69
  end
74
70
 
@@ -84,10 +80,6 @@ module Datadog
84
80
  def initialize
85
81
  super(:flush_completed)
86
82
  end
87
-
88
- def publish(response)
89
- super(response)
90
- end
91
83
  end
92
84
  end
93
85
 
@@ -127,10 +119,15 @@ module Datadog
127
119
 
128
120
  # NOTE: #perform is wrapped by other modules:
129
121
  # Polling --> Async --> IntervalLoop --> AsyncTraceWriter --> TraceWriter
122
+ #
123
+ # WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#perform is spec'd to return the
124
+ # result from the writer, whereas this method always returns nil.
130
125
  def perform(traces)
131
126
  super(traces).tap do |responses|
132
127
  loop_back_off! if responses.find(&:server_error?)
133
128
  end
129
+
130
+ nil
134
131
  end
135
132
 
136
133
  def stop(*args)
@@ -148,6 +145,7 @@ module Datadog
148
145
  [buffer.pop]
149
146
  end
150
147
 
148
+ # Are there more traces to be processed next?
151
149
  def work_pending?
152
150
  !buffer.empty?
153
151
  end
@@ -187,6 +185,8 @@ module Datadog
187
185
  @async = false if @writer_fork_policy == FORK_POLICY_SYNC
188
186
  end
189
187
 
188
+ # WARNING: This method breaks the Liskov Substitution Principle -- TraceWriter#write is spec'd to return the
189
+ # result from the writer, whereas this method returns something else when running in async mode.
190
190
  def write(trace)
191
191
  # Start worker thread. If the process has forked, it will trigger #after_fork to
192
192
  # reconfigure the worker accordingly.
@@ -8,10 +8,13 @@ require 'ddtrace/transport/io'
8
8
  require 'ddtrace/encoding'
9
9
  require 'ddtrace/workers'
10
10
  require 'ddtrace/diagnostics/environment_logger'
11
+ require 'ddtrace/utils/only_once'
11
12
 
12
13
  module Datadog
13
14
  # Processor that sends traces and metadata to the agent
14
15
  class Writer
16
+ DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
17
+
15
18
  attr_reader \
16
19
  :priority_sampler,
17
20
  :transport,
@@ -42,13 +45,23 @@ module Datadog
42
45
 
43
46
  # one worker for traces
44
47
  @worker = nil
48
+
49
+ # Once stopped, this writer instance cannot be restarted.
50
+ # This allow for graceful shutdown, while preventing
51
+ # the host application from inadvertently start new
52
+ # threads during shutdown.
53
+ @stopped = false
45
54
  end
46
55
 
47
56
  def start
48
57
  @mutex_after_fork.synchronize do
58
+ return false if @stopped
59
+
49
60
  pid = Process.pid
50
61
  return if @worker && pid == @pid
62
+
51
63
  @pid = pid
64
+
52
65
  start_worker
53
66
  true
54
67
  end
@@ -67,14 +80,24 @@ module Datadog
67
80
  @worker.start
68
81
  end
69
82
 
83
+ # Gracefully shuts down this writer.
84
+ #
85
+ # Once stopped methods calls won't fail, but
86
+ # no internal work will be performed.
87
+ #
88
+ # It is not possible to restart a stopped writer instance.
70
89
  def stop
71
90
  @mutex_after_fork.synchronize { stop_worker }
72
91
  end
73
92
 
74
93
  def stop_worker
94
+ @stopped = true
95
+
75
96
  return if @worker.nil?
97
+
76
98
  @worker.stop
77
99
  @worker = nil
100
+
78
101
  true
79
102
  end
80
103
 
@@ -107,7 +130,7 @@ module Datadog
107
130
  # enqueue the trace for submission to the API
108
131
  def write(trace, services = nil)
109
132
  unless services.nil?
110
- Datadog::Patcher.do_once('Writer#write') do
133
+ DEPRECATION_WARN_ONLY_ONCE.run do
111
134
  Datadog.logger.warn(%(
112
135
  write: Writing services has been deprecated and no longer need to be provided.
113
136
  write(traces, services) can be updated to write(traces)
@@ -136,7 +159,7 @@ module Datadog
136
159
 
137
160
  if worker_local
138
161
  worker_local.enqueue_trace(trace)
139
- else
162
+ elsif !@stopped
140
163
  Datadog.logger.debug('Writer either failed to start or was stopped before #write could complete')
141
164
  end
142
165
  end
@@ -156,9 +179,7 @@ module Datadog
156
179
  next if trace.first.nil?
157
180
 
158
181
  hostname = Datadog::Runtime::Socket.hostname
159
- unless hostname.nil? || hostname.empty?
160
- trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
161
- end
182
+ trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
162
183
  end
163
184
  end
164
185
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddtrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.42.0
4
+ version: 0.47.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-21 00:00:00.000000000 Z
11
+ date: 2021-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -24,370 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: dogstatsd-ruby
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 3.3.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: 3.3.0
41
- - !ruby/object:Gem::Dependency
42
- name: opentracing
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 0.4.1
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: 0.4.1
55
- - !ruby/object:Gem::Dependency
56
- name: concurrent-ruby
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '10.5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '10.5'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: 0.49.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: 0.49.1
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.0'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec-collection_matchers
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.1'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '1.1'
125
- - !ruby/object:Gem::Dependency
126
- name: ruby-prof
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '1.4'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.4'
139
- - !ruby/object:Gem::Dependency
140
- name: minitest
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - '='
144
- - !ruby/object:Gem::Version
145
- version: 5.10.1
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - '='
151
- - !ruby/object:Gem::Version
152
- version: 5.10.1
153
- - !ruby/object:Gem::Dependency
154
- name: minitest-around
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - '='
158
- - !ruby/object:Gem::Version
159
- version: 0.5.0
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - '='
165
- - !ruby/object:Gem::Version
166
- version: 0.5.0
167
- - !ruby/object:Gem::Dependency
168
- name: minitest-stub_any_instance
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - '='
172
- - !ruby/object:Gem::Version
173
- version: 1.0.2
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - '='
179
- - !ruby/object:Gem::Version
180
- version: 1.0.2
181
- - !ruby/object:Gem::Dependency
182
- name: appraisal
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '2.2'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: '2.2'
195
- - !ruby/object:Gem::Dependency
196
- name: yard
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '0.9'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '0.9'
209
- - !ruby/object:Gem::Dependency
210
- name: webmock
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: '2.0'
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '2.0'
223
- - !ruby/object:Gem::Dependency
224
- name: builder
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
- - !ruby/object:Gem::Dependency
238
- name: sqlite3
239
- requirement: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - "~>"
242
- - !ruby/object:Gem::Version
243
- version: 1.3.6
244
- type: :development
245
- prerelease: false
246
- version_requirements: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - "~>"
249
- - !ruby/object:Gem::Version
250
- version: 1.3.6
251
- - !ruby/object:Gem::Dependency
252
- name: climate_control
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - "~>"
256
- - !ruby/object:Gem::Version
257
- version: 0.2.0
258
- type: :development
259
- prerelease: false
260
- version_requirements: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - "~>"
263
- - !ruby/object:Gem::Version
264
- version: 0.2.0
265
- - !ruby/object:Gem::Dependency
266
- name: addressable
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - "~>"
270
- - !ruby/object:Gem::Version
271
- version: 2.4.0
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - "~>"
277
- - !ruby/object:Gem::Version
278
- version: 2.4.0
279
- - !ruby/object:Gem::Dependency
280
- name: benchmark-ips
281
- requirement: !ruby/object:Gem::Requirement
282
- requirements:
283
- - - "~>"
284
- - !ruby/object:Gem::Version
285
- version: '2.8'
286
- type: :development
287
- prerelease: false
288
- version_requirements: !ruby/object:Gem::Requirement
289
- requirements:
290
- - - "~>"
291
- - !ruby/object:Gem::Version
292
- version: '2.8'
293
- - !ruby/object:Gem::Dependency
294
- name: benchmark-memory
295
- requirement: !ruby/object:Gem::Requirement
296
- requirements:
297
- - - "~>"
298
- - !ruby/object:Gem::Version
299
- version: '0.1'
300
- type: :development
301
- prerelease: false
302
- version_requirements: !ruby/object:Gem::Requirement
303
- requirements:
304
- - - "~>"
305
- - !ruby/object:Gem::Version
306
- version: '0.1'
307
- - !ruby/object:Gem::Dependency
308
- name: memory_profiler
309
- requirement: !ruby/object:Gem::Requirement
310
- requirements:
311
- - - "~>"
312
- - !ruby/object:Gem::Version
313
- version: '0.9'
314
- type: :development
315
- prerelease: false
316
- version_requirements: !ruby/object:Gem::Requirement
317
- requirements:
318
- - - "~>"
319
- - !ruby/object:Gem::Version
320
- version: '0.9'
321
- - !ruby/object:Gem::Dependency
322
- name: redcarpet
323
- requirement: !ruby/object:Gem::Requirement
324
- requirements:
325
- - - "~>"
326
- - !ruby/object:Gem::Version
327
- version: '3.4'
328
- type: :development
329
- prerelease: false
330
- version_requirements: !ruby/object:Gem::Requirement
331
- requirements:
332
- - - "~>"
333
- - !ruby/object:Gem::Version
334
- version: '3.4'
335
- - !ruby/object:Gem::Dependency
336
- name: pry
337
- requirement: !ruby/object:Gem::Requirement
338
- requirements:
339
- - - "~>"
340
- - !ruby/object:Gem::Version
341
- version: 0.10.4
342
- type: :development
343
- prerelease: false
344
- version_requirements: !ruby/object:Gem::Requirement
345
- requirements:
346
- - - "~>"
347
- - !ruby/object:Gem::Version
348
- version: 0.10.4
349
- - !ruby/object:Gem::Dependency
350
- name: pry-stack_explorer
351
- requirement: !ruby/object:Gem::Requirement
352
- requirements:
353
- - - "~>"
354
- - !ruby/object:Gem::Version
355
- version: 0.4.9.2
356
- type: :development
357
- prerelease: false
358
- version_requirements: !ruby/object:Gem::Requirement
359
- requirements:
360
- - - "~>"
361
- - !ruby/object:Gem::Version
362
- version: 0.4.9.2
363
- - !ruby/object:Gem::Dependency
364
- name: simplecov
365
- requirement: !ruby/object:Gem::Requirement
366
- requirements:
367
- - - "~>"
368
- - !ruby/object:Gem::Version
369
- version: '0.17'
370
- type: :development
371
- prerelease: false
372
- version_requirements: !ruby/object:Gem::Requirement
373
- requirements:
374
- - - "~>"
375
- - !ruby/object:Gem::Version
376
- version: '0.17'
377
- - !ruby/object:Gem::Dependency
378
- name: warning
379
- requirement: !ruby/object:Gem::Requirement
380
- requirements:
381
- - - "~>"
382
- - !ruby/object:Gem::Version
383
- version: '1'
384
- type: :development
385
- prerelease: false
386
- version_requirements: !ruby/object:Gem::Requirement
387
- requirements:
388
- - - "~>"
389
- - !ruby/object:Gem::Version
390
- version: '1'
391
27
  description: |
392
28
  ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
393
29
  as they flow across web servers, databases and microservices so that developers
@@ -407,14 +43,20 @@ files:
407
43
  - ".circleci/images/primary/Dockerfile-2.5.6"
408
44
  - ".circleci/images/primary/Dockerfile-2.6.4"
409
45
  - ".circleci/images/primary/Dockerfile-2.7.0"
410
- - ".circleci/images/primary/Dockerfile-jruby-9.2"
46
+ - ".circleci/images/primary/Dockerfile-3.0.0"
47
+ - ".circleci/images/primary/Dockerfile-jruby-9.2-latest"
48
+ - ".circleci/images/primary/Dockerfile-jruby-9.2.0.0"
49
+ - ".circleci/images/primary/Dockerfile-truffleruby-21.0.0"
411
50
  - ".dockerignore"
412
51
  - ".env"
413
52
  - ".github/CODEOWNERS"
53
+ - ".github/workflows/add-milestone-to-pull-requests.yml"
54
+ - ".github/workflows/create-next-milestone.yml"
414
55
  - ".gitignore"
415
56
  - ".gitlab-ci.yml"
416
57
  - ".rspec"
417
58
  - ".rubocop.yml"
59
+ - ".rubocop_todo.yml"
418
60
  - ".simplecov"
419
61
  - ".yardopts"
420
62
  - Appraisals
@@ -422,6 +64,7 @@ files:
422
64
  - CONTRIBUTING.md
423
65
  - Gemfile
424
66
  - LICENSE
67
+ - LICENSE-3rdparty.csv
425
68
  - LICENSE.Apache
426
69
  - LICENSE.BSD3
427
70
  - NOTICE
@@ -433,12 +76,138 @@ files:
433
76
  - docker-compose.yml
434
77
  - docs/DevelopmentGuide.md
435
78
  - docs/GettingStarted.md
79
+ - integration/README.md
80
+ - integration/apps/rack/.dockerignore
81
+ - integration/apps/rack/.envrc.sample
82
+ - integration/apps/rack/.gitignore
83
+ - integration/apps/rack/.rspec
84
+ - integration/apps/rack/Dockerfile
85
+ - integration/apps/rack/Dockerfile-ci
86
+ - integration/apps/rack/Gemfile
87
+ - integration/apps/rack/README.md
88
+ - integration/apps/rack/app/acme.rb
89
+ - integration/apps/rack/app/datadog.rb
90
+ - integration/apps/rack/bin/run
91
+ - integration/apps/rack/bin/setup
92
+ - integration/apps/rack/bin/test
93
+ - integration/apps/rack/config.ru
94
+ - integration/apps/rack/config/puma.rb
95
+ - integration/apps/rack/config/unicorn.rb
96
+ - integration/apps/rack/docker-compose.ci.yml
97
+ - integration/apps/rack/docker-compose.yml
98
+ - integration/apps/rack/script/build-images
99
+ - integration/apps/rack/script/ci
100
+ - integration/apps/rack/spec/integration/basic_spec.rb
101
+ - integration/apps/rack/spec/spec_helper.rb
102
+ - integration/apps/rack/spec/support/integration_helper.rb
103
+ - integration/apps/rails-five/.dockerignore
104
+ - integration/apps/rails-five/.env
105
+ - integration/apps/rails-five/.envrc.sample
106
+ - integration/apps/rails-five/.gitignore
107
+ - integration/apps/rails-five/Dockerfile
108
+ - integration/apps/rails-five/Dockerfile-ci
109
+ - integration/apps/rails-five/Gemfile
110
+ - integration/apps/rails-five/README.md
111
+ - integration/apps/rails-five/Rakefile
112
+ - integration/apps/rails-five/app/channels/application_cable/channel.rb
113
+ - integration/apps/rails-five/app/channels/application_cable/connection.rb
114
+ - integration/apps/rails-five/app/controllers/application_controller.rb
115
+ - integration/apps/rails-five/app/controllers/basic_controller.rb
116
+ - integration/apps/rails-five/app/controllers/concerns/.keep
117
+ - integration/apps/rails-five/app/controllers/health_controller.rb
118
+ - integration/apps/rails-five/app/controllers/jobs_controller.rb
119
+ - integration/apps/rails-five/app/jobs/application_job.rb
120
+ - integration/apps/rails-five/app/jobs/test_job.rb
121
+ - integration/apps/rails-five/app/mailers/application_mailer.rb
122
+ - integration/apps/rails-five/app/models/application_record.rb
123
+ - integration/apps/rails-five/app/models/concerns/.keep
124
+ - integration/apps/rails-five/app/models/test.rb
125
+ - integration/apps/rails-five/app/views/layouts/mailer.html.erb
126
+ - integration/apps/rails-five/app/views/layouts/mailer.text.erb
127
+ - integration/apps/rails-five/bin/bundle
128
+ - integration/apps/rails-five/bin/rails
129
+ - integration/apps/rails-five/bin/rake
130
+ - integration/apps/rails-five/bin/run
131
+ - integration/apps/rails-five/bin/setup
132
+ - integration/apps/rails-five/bin/spring
133
+ - integration/apps/rails-five/bin/test
134
+ - integration/apps/rails-five/bin/update
135
+ - integration/apps/rails-five/config.ru
136
+ - integration/apps/rails-five/config/application.rb
137
+ - integration/apps/rails-five/config/boot.rb
138
+ - integration/apps/rails-five/config/cable.yml
139
+ - integration/apps/rails-five/config/credentials.yml.enc
140
+ - integration/apps/rails-five/config/database.yml
141
+ - integration/apps/rails-five/config/environment.rb
142
+ - integration/apps/rails-five/config/environments/development.rb
143
+ - integration/apps/rails-five/config/environments/production.rb
144
+ - integration/apps/rails-five/config/environments/test.rb
145
+ - integration/apps/rails-five/config/initializers/datadog.rb
146
+ - integration/apps/rails-five/config/initializers/filter_parameter_logging.rb
147
+ - integration/apps/rails-five/config/initializers/resque.rb
148
+ - integration/apps/rails-five/config/initializers/rollbar.rb
149
+ - integration/apps/rails-five/config/initializers/wrap_parameters.rb
150
+ - integration/apps/rails-five/config/locales/en.yml
151
+ - integration/apps/rails-five/config/puma.rb
152
+ - integration/apps/rails-five/config/routes.rb
153
+ - integration/apps/rails-five/config/spring.rb
154
+ - integration/apps/rails-five/config/unicorn.rb
155
+ - integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb
156
+ - integration/apps/rails-five/db/schema.rb
157
+ - integration/apps/rails-five/db/seeds.rb
158
+ - integration/apps/rails-five/docker-compose.ci.yml
159
+ - integration/apps/rails-five/docker-compose.yml
160
+ - integration/apps/rails-five/lib/tasks/.keep
161
+ - integration/apps/rails-five/log/.keep
162
+ - integration/apps/rails-five/public/robots.txt
163
+ - integration/apps/rails-five/script/build-images
164
+ - integration/apps/rails-five/script/ci
165
+ - integration/apps/rails-five/spec/integration/basic_spec.rb
166
+ - integration/apps/rails-five/spec/spec_helper.rb
167
+ - integration/apps/rails-five/spec/support/integration_helper.rb
168
+ - integration/apps/rails-five/storage/.keep
169
+ - integration/apps/rails-five/tmp/.keep
170
+ - integration/apps/rails-five/vendor/.keep
171
+ - integration/apps/ruby/.dockerignore
172
+ - integration/apps/ruby/.envrc.sample
173
+ - integration/apps/ruby/.gitignore
174
+ - integration/apps/ruby/Dockerfile
175
+ - integration/apps/ruby/Dockerfile-ci
176
+ - integration/apps/ruby/Gemfile
177
+ - integration/apps/ruby/README.md
178
+ - integration/apps/ruby/agent.yaml
179
+ - integration/apps/ruby/app/datadog.rb
180
+ - integration/apps/ruby/app/fibonacci.rb
181
+ - integration/apps/ruby/bin/run
182
+ - integration/apps/ruby/bin/setup
183
+ - integration/apps/ruby/bin/test
184
+ - integration/apps/ruby/docker-compose.ci.yml
185
+ - integration/apps/ruby/docker-compose.yml
186
+ - integration/apps/ruby/script/build-images
187
+ - integration/apps/ruby/script/ci
188
+ - integration/images/agent/Dockerfile
189
+ - integration/images/agent/agent.yaml
190
+ - integration/images/include/datadog/analyzer.rb
191
+ - integration/images/include/datadog/demo_env.rb
192
+ - integration/images/include/http-health-check
193
+ - integration/images/ruby/2.0/Dockerfile
194
+ - integration/images/ruby/2.1/Dockerfile
195
+ - integration/images/ruby/2.2/Dockerfile
196
+ - integration/images/ruby/2.3/Dockerfile
197
+ - integration/images/ruby/2.4/Dockerfile
198
+ - integration/images/ruby/2.5/Dockerfile
199
+ - integration/images/ruby/2.6/Dockerfile
200
+ - integration/images/ruby/2.7/Dockerfile
201
+ - integration/images/ruby/3.0/Dockerfile
202
+ - integration/images/wrk/Dockerfile
203
+ - integration/images/wrk/scripts/entrypoint.sh
204
+ - integration/images/wrk/scripts/scenarios/basic/default.lua
205
+ - integration/images/wrk/scripts/scenarios/basic/fibonacci.lua
206
+ - integration/script/build-images
436
207
  - lib/ddtrace.rb
437
208
  - lib/ddtrace/analytics.rb
438
- - lib/ddtrace/augmentation.rb
439
- - lib/ddtrace/augmentation/method_wrapper.rb
440
- - lib/ddtrace/augmentation/method_wrapping.rb
441
- - lib/ddtrace/augmentation/shim.rb
209
+ - lib/ddtrace/auto_instrument.rb
210
+ - lib/ddtrace/auto_instrument_base.rb
442
211
  - lib/ddtrace/buffer.rb
443
212
  - lib/ddtrace/chunker.rb
444
213
  - lib/ddtrace/configuration.rb
@@ -512,6 +281,7 @@ files:
512
281
  - lib/ddtrace/contrib/active_support/notifications/subscription.rb
513
282
  - lib/ddtrace/contrib/active_support/patcher.rb
514
283
  - lib/ddtrace/contrib/analytics.rb
284
+ - lib/ddtrace/contrib/auto_instrument.rb
515
285
  - lib/ddtrace/contrib/aws/configuration/settings.rb
516
286
  - lib/ddtrace/contrib/aws/ext.rb
517
287
  - lib/ddtrace/contrib/aws/instrumentation.rb
@@ -529,6 +299,12 @@ files:
529
299
  - lib/ddtrace/contrib/configuration/resolver.rb
530
300
  - lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb
531
301
  - lib/ddtrace/contrib/configuration/settings.rb
302
+ - lib/ddtrace/contrib/cucumber/configuration/settings.rb
303
+ - lib/ddtrace/contrib/cucumber/ext.rb
304
+ - lib/ddtrace/contrib/cucumber/formatter.rb
305
+ - lib/ddtrace/contrib/cucumber/instrumentation.rb
306
+ - lib/ddtrace/contrib/cucumber/integration.rb
307
+ - lib/ddtrace/contrib/cucumber/patcher.rb
532
308
  - lib/ddtrace/contrib/dalli/configuration/settings.rb
533
309
  - lib/ddtrace/contrib/dalli/ext.rb
534
310
  - lib/ddtrace/contrib/dalli/instrumentation.rb
@@ -589,6 +365,11 @@ files:
589
365
  - lib/ddtrace/contrib/http/integration.rb
590
366
  - lib/ddtrace/contrib/http/patcher.rb
591
367
  - lib/ddtrace/contrib/http_annotation_helper.rb
368
+ - lib/ddtrace/contrib/httpclient/configuration/settings.rb
369
+ - lib/ddtrace/contrib/httpclient/ext.rb
370
+ - lib/ddtrace/contrib/httpclient/instrumentation.rb
371
+ - lib/ddtrace/contrib/httpclient/integration.rb
372
+ - lib/ddtrace/contrib/httpclient/patcher.rb
592
373
  - lib/ddtrace/contrib/httprb/configuration/settings.rb
593
374
  - lib/ddtrace/contrib/httprb/ext.rb
594
375
  - lib/ddtrace/contrib/httprb/instrumentation.rb
@@ -631,6 +412,12 @@ files:
631
412
  - lib/ddtrace/contrib/presto/instrumentation.rb
632
413
  - lib/ddtrace/contrib/presto/integration.rb
633
414
  - lib/ddtrace/contrib/presto/patcher.rb
415
+ - lib/ddtrace/contrib/qless/configuration/settings.rb
416
+ - lib/ddtrace/contrib/qless/ext.rb
417
+ - lib/ddtrace/contrib/qless/integration.rb
418
+ - lib/ddtrace/contrib/qless/patcher.rb
419
+ - lib/ddtrace/contrib/qless/qless_job.rb
420
+ - lib/ddtrace/contrib/qless/tracer_cleaner.rb
634
421
  - lib/ddtrace/contrib/que/configuration/settings.rb
635
422
  - lib/ddtrace/contrib/que/ext.rb
636
423
  - lib/ddtrace/contrib/que/integration.rb
@@ -651,6 +438,7 @@ files:
651
438
  - lib/ddtrace/contrib/rack/middlewares.rb
652
439
  - lib/ddtrace/contrib/rack/patcher.rb
653
440
  - lib/ddtrace/contrib/rack/request_queue.rb
441
+ - lib/ddtrace/contrib/rails/auto_instrument_railtie.rb
654
442
  - lib/ddtrace/contrib/rails/configuration/settings.rb
655
443
  - lib/ddtrace/contrib/rails/ext.rb
656
444
  - lib/ddtrace/contrib/rails/framework.rb
@@ -672,6 +460,7 @@ files:
672
460
  - lib/ddtrace/contrib/redis/patcher.rb
673
461
  - lib/ddtrace/contrib/redis/quantize.rb
674
462
  - lib/ddtrace/contrib/redis/tags.rb
463
+ - lib/ddtrace/contrib/redis/vendor/LICENSE
675
464
  - lib/ddtrace/contrib/redis/vendor/resolver.rb
676
465
  - lib/ddtrace/contrib/registerable.rb
677
466
  - lib/ddtrace/contrib/registry.rb
@@ -685,6 +474,11 @@ files:
685
474
  - lib/ddtrace/contrib/rest_client/integration.rb
686
475
  - lib/ddtrace/contrib/rest_client/patcher.rb
687
476
  - lib/ddtrace/contrib/rest_client/request_patch.rb
477
+ - lib/ddtrace/contrib/rspec/configuration/settings.rb
478
+ - lib/ddtrace/contrib/rspec/example.rb
479
+ - lib/ddtrace/contrib/rspec/ext.rb
480
+ - lib/ddtrace/contrib/rspec/integration.rb
481
+ - lib/ddtrace/contrib/rspec/patcher.rb
688
482
  - lib/ddtrace/contrib/sequel/configuration/settings.rb
689
483
  - lib/ddtrace/contrib/sequel/database.rb
690
484
  - lib/ddtrace/contrib/sequel/dataset.rb
@@ -717,6 +511,7 @@ files:
717
511
  - lib/ddtrace/contrib/sneakers/integration.rb
718
512
  - lib/ddtrace/contrib/sneakers/patcher.rb
719
513
  - lib/ddtrace/contrib/sneakers/tracer.rb
514
+ - lib/ddtrace/contrib/status_code_matcher.rb
720
515
  - lib/ddtrace/contrib/sucker_punch/configuration/settings.rb
721
516
  - lib/ddtrace/contrib/sucker_punch/exception_handler.rb
722
517
  - lib/ddtrace/contrib/sucker_punch/ext.rb
@@ -737,12 +532,14 @@ files:
737
532
  - lib/ddtrace/event.rb
738
533
  - lib/ddtrace/ext/analytics.rb
739
534
  - lib/ddtrace/ext/app_types.rb
535
+ - lib/ddtrace/ext/ci.rb
740
536
  - lib/ddtrace/ext/correlation.rb
741
537
  - lib/ddtrace/ext/diagnostics.rb
742
538
  - lib/ddtrace/ext/distributed.rb
743
539
  - lib/ddtrace/ext/environment.rb
744
540
  - lib/ddtrace/ext/errors.rb
745
541
  - lib/ddtrace/ext/forced_tracing.rb
542
+ - lib/ddtrace/ext/git.rb
746
543
  - lib/ddtrace/ext/http.rb
747
544
  - lib/ddtrace/ext/integration.rb
748
545
  - lib/ddtrace/ext/manual_tracing.rb
@@ -752,11 +549,11 @@ files:
752
549
  - lib/ddtrace/ext/runtime.rb
753
550
  - lib/ddtrace/ext/sampling.rb
754
551
  - lib/ddtrace/ext/sql.rb
552
+ - lib/ddtrace/ext/test.rb
755
553
  - lib/ddtrace/ext/transport.rb
756
554
  - lib/ddtrace/forced_tracing.rb
757
555
  - lib/ddtrace/logger.rb
758
556
  - lib/ddtrace/metrics.rb
759
- - lib/ddtrace/monkey.rb
760
557
  - lib/ddtrace/opentelemetry/extensions.rb
761
558
  - lib/ddtrace/opentelemetry/span.rb
762
559
  - lib/ddtrace/opentracer.rb
@@ -829,9 +626,24 @@ files:
829
626
  - lib/ddtrace/transport/statistics.rb
830
627
  - lib/ddtrace/transport/traces.rb
831
628
  - lib/ddtrace/utils.rb
629
+ - lib/ddtrace/utils/compression.rb
832
630
  - lib/ddtrace/utils/database.rb
631
+ - lib/ddtrace/utils/forking.rb
632
+ - lib/ddtrace/utils/object_set.rb
633
+ - lib/ddtrace/utils/only_once.rb
634
+ - lib/ddtrace/utils/sequence.rb
635
+ - lib/ddtrace/utils/string_table.rb
833
636
  - lib/ddtrace/utils/time.rb
637
+ - lib/ddtrace/vendor/active_record/MIT-LICENSE
834
638
  - lib/ddtrace/vendor/active_record/connection_specification.rb
639
+ - lib/ddtrace/vendor/multipart-post/LICENSE
640
+ - lib/ddtrace/vendor/multipart-post/multipart.rb
641
+ - lib/ddtrace/vendor/multipart-post/multipart/post.rb
642
+ - lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb
643
+ - lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb
644
+ - lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb
645
+ - lib/ddtrace/vendor/multipart-post/multipart/post/version.rb
646
+ - lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb
835
647
  - lib/ddtrace/version.rb
836
648
  - lib/ddtrace/worker.rb
837
649
  - lib/ddtrace/workers.rb
@@ -863,7 +675,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
863
675
  - !ruby/object:Gem::Version
864
676
  version: 2.0.0
865
677
  requirements: []
866
- rubygems_version: 3.0.3
678
+ rubyforge_project:
679
+ rubygems_version: 2.5.2.3
867
680
  signing_key:
868
681
  specification_version: 4
869
682
  summary: Datadog tracing code for your Ruby applications