ddtrace 0.41.0 → 0.46.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 (332) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +223 -126
  3. data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
  4. data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
  5. data/.github/workflows/create-next-milestone.yml +20 -0
  6. data/.rubocop.yml +250 -7
  7. data/.rubocop_todo.yml +396 -0
  8. data/.simplecov +3 -0
  9. data/Appraisals +429 -135
  10. data/CHANGELOG.md +1158 -354
  11. data/CONTRIBUTING.md +2 -2
  12. data/Gemfile +40 -3
  13. data/README.md +1 -0
  14. data/Rakefile +236 -29
  15. data/ddtrace.gemspec +4 -35
  16. data/docker-compose.yml +30 -0
  17. data/docs/DevelopmentGuide.md +40 -2
  18. data/docs/GettingStarted.md +186 -16
  19. data/integration/README.md +68 -0
  20. data/integration/apps/rack/.dockerignore +1 -0
  21. data/integration/apps/rack/.envrc.sample +1 -0
  22. data/integration/apps/rack/.gitignore +4 -0
  23. data/integration/apps/rack/.rspec +1 -0
  24. data/integration/apps/rack/Dockerfile +25 -0
  25. data/integration/apps/rack/Dockerfile-ci +11 -0
  26. data/integration/apps/rack/Gemfile +24 -0
  27. data/integration/apps/rack/README.md +93 -0
  28. data/integration/apps/rack/app/acme.rb +80 -0
  29. data/integration/apps/rack/app/datadog.rb +17 -0
  30. data/integration/apps/rack/bin/run +22 -0
  31. data/integration/apps/rack/bin/setup +17 -0
  32. data/integration/apps/rack/bin/test +24 -0
  33. data/integration/apps/rack/config.ru +6 -0
  34. data/integration/apps/rack/config/puma.rb +14 -0
  35. data/integration/apps/rack/config/unicorn.rb +23 -0
  36. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  37. data/integration/apps/rack/docker-compose.yml +78 -0
  38. data/integration/apps/rack/script/build-images +38 -0
  39. data/integration/apps/rack/script/ci +50 -0
  40. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  41. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  42. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  43. data/integration/apps/rails-five/.dockerignore +1 -0
  44. data/integration/apps/rails-five/.env +3 -0
  45. data/integration/apps/rails-five/.envrc.sample +1 -0
  46. data/integration/apps/rails-five/.gitignore +30 -0
  47. data/integration/apps/rails-five/Dockerfile +25 -0
  48. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  49. data/integration/apps/rails-five/Gemfile +104 -0
  50. data/integration/apps/rails-five/README.md +94 -0
  51. data/integration/apps/rails-five/Rakefile +6 -0
  52. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  53. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  54. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  55. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  56. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  57. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  58. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  59. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  60. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  61. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  62. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  63. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  64. data/integration/apps/rails-five/app/models/test.rb +2 -0
  65. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  66. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  67. data/integration/apps/rails-five/bin/bundle +3 -0
  68. data/integration/apps/rails-five/bin/rails +9 -0
  69. data/integration/apps/rails-five/bin/rake +9 -0
  70. data/integration/apps/rails-five/bin/run +24 -0
  71. data/integration/apps/rails-five/bin/setup +27 -0
  72. data/integration/apps/rails-five/bin/spring +17 -0
  73. data/integration/apps/rails-five/bin/test +21 -0
  74. data/integration/apps/rails-five/bin/update +28 -0
  75. data/integration/apps/rails-five/config.ru +5 -0
  76. data/integration/apps/rails-five/config/application.rb +97 -0
  77. data/integration/apps/rails-five/config/boot.rb +4 -0
  78. data/integration/apps/rails-five/config/cable.yml +10 -0
  79. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  80. data/integration/apps/rails-five/config/database.yml +28 -0
  81. data/integration/apps/rails-five/config/environment.rb +5 -0
  82. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  83. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  84. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  85. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  86. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  87. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  88. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  89. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  90. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  91. data/integration/apps/rails-five/config/puma.rb +24 -0
  92. data/integration/apps/rails-five/config/routes.rb +11 -0
  93. data/integration/apps/rails-five/config/spring.rb +6 -0
  94. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  95. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  96. data/integration/apps/rails-five/db/schema.rb +23 -0
  97. data/integration/apps/rails-five/db/seeds.rb +7 -0
  98. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  99. data/integration/apps/rails-five/docker-compose.yml +100 -0
  100. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  101. data/integration/apps/rails-five/log/.keep +0 -0
  102. data/integration/apps/rails-five/public/robots.txt +1 -0
  103. data/integration/apps/rails-five/script/build-images +35 -0
  104. data/integration/apps/rails-five/script/ci +50 -0
  105. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  106. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  107. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  108. data/integration/apps/rails-five/storage/.keep +0 -0
  109. data/integration/apps/rails-five/tmp/.keep +0 -0
  110. data/integration/apps/rails-five/vendor/.keep +0 -0
  111. data/integration/apps/ruby/.dockerignore +1 -0
  112. data/integration/apps/ruby/.envrc.sample +1 -0
  113. data/integration/apps/ruby/.gitignore +2 -0
  114. data/integration/apps/ruby/Dockerfile +25 -0
  115. data/integration/apps/ruby/Dockerfile-ci +11 -0
  116. data/integration/apps/ruby/Gemfile +11 -0
  117. data/integration/apps/ruby/README.md +70 -0
  118. data/integration/apps/ruby/agent.yaml +3 -0
  119. data/integration/apps/ruby/app/datadog.rb +13 -0
  120. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  121. data/integration/apps/ruby/bin/run +20 -0
  122. data/integration/apps/ruby/bin/setup +17 -0
  123. data/integration/apps/ruby/bin/test +21 -0
  124. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  125. data/integration/apps/ruby/docker-compose.yml +63 -0
  126. data/integration/apps/ruby/script/build-images +38 -0
  127. data/integration/apps/ruby/script/ci +50 -0
  128. data/integration/images/agent/Dockerfile +2 -0
  129. data/integration/images/agent/agent.yaml +3 -0
  130. data/integration/images/include/datadog/analyzer.rb +71 -0
  131. data/integration/images/include/datadog/demo_env.rb +101 -0
  132. data/integration/images/include/http-health-check +33 -0
  133. data/integration/images/ruby/2.0/Dockerfile +54 -0
  134. data/integration/images/ruby/2.1/Dockerfile +54 -0
  135. data/integration/images/ruby/2.2/Dockerfile +54 -0
  136. data/integration/images/ruby/2.3/Dockerfile +70 -0
  137. data/integration/images/ruby/2.4/Dockerfile +54 -0
  138. data/integration/images/ruby/2.5/Dockerfile +54 -0
  139. data/integration/images/ruby/2.6/Dockerfile +54 -0
  140. data/integration/images/ruby/2.7/Dockerfile +54 -0
  141. data/integration/images/ruby/3.0/Dockerfile +54 -0
  142. data/integration/images/wrk/Dockerfile +33 -0
  143. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  144. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  145. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  146. data/integration/script/build-images +43 -0
  147. data/lib/ddtrace.rb +10 -5
  148. data/lib/ddtrace/analytics.rb +2 -0
  149. data/lib/ddtrace/auto_instrument.rb +3 -0
  150. data/lib/ddtrace/auto_instrument_base.rb +6 -0
  151. data/lib/ddtrace/buffer.rb +230 -134
  152. data/lib/ddtrace/configuration.rb +21 -5
  153. data/lib/ddtrace/configuration/base.rb +1 -1
  154. data/lib/ddtrace/configuration/components.rb +2 -2
  155. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  156. data/lib/ddtrace/configuration/options.rb +2 -3
  157. data/lib/ddtrace/configuration/settings.rb +21 -5
  158. data/lib/ddtrace/context.rb +23 -6
  159. data/lib/ddtrace/context_provider.rb +18 -5
  160. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  161. data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
  162. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
  163. data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
  164. data/lib/ddtrace/contrib/action_view/event.rb +1 -5
  165. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
  166. data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
  167. data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
  168. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  169. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +17 -5
  170. data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
  171. data/lib/ddtrace/contrib/active_record/utils.rb +68 -21
  172. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
  173. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
  174. data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
  175. data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
  176. data/lib/ddtrace/contrib/active_support/notifications/event.rb +12 -1
  177. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  178. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  179. data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
  180. data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
  181. data/lib/ddtrace/contrib/aws/patcher.rb +1 -1
  182. data/lib/ddtrace/contrib/aws/services.rb +2 -0
  183. data/lib/ddtrace/contrib/configurable.rb +2 -0
  184. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +6 -8
  185. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
  186. data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
  187. data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
  188. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
  189. data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
  190. data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
  191. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
  192. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
  193. data/lib/ddtrace/contrib/delayed_job/ext.rb +2 -0
  194. data/lib/ddtrace/contrib/delayed_job/plugin.rb +38 -15
  195. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  196. data/lib/ddtrace/contrib/ethon/easy_patch.rb +11 -10
  197. data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
  198. data/lib/ddtrace/contrib/excon/middleware.rb +9 -7
  199. data/lib/ddtrace/contrib/extensions.rb +28 -1
  200. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  201. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
  202. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
  203. data/lib/ddtrace/contrib/grape/endpoint.rb +47 -21
  204. data/lib/ddtrace/contrib/grape/ext.rb +1 -0
  205. data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
  206. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  207. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -1
  208. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  209. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
  210. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  211. data/lib/ddtrace/contrib/http/instrumentation.rb +7 -7
  212. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
  213. data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
  214. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +151 -0
  215. data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
  216. data/lib/ddtrace/contrib/httpclient/patcher.rb +35 -0
  217. data/lib/ddtrace/contrib/httprb/instrumentation.rb +5 -6
  218. data/lib/ddtrace/contrib/kafka/event.rb +1 -1
  219. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
  220. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  221. data/lib/ddtrace/contrib/patchable.rb +18 -7
  222. data/lib/ddtrace/contrib/patcher.rb +1 -1
  223. data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
  224. data/lib/ddtrace/contrib/qless/ext.rb +20 -0
  225. data/lib/ddtrace/contrib/qless/integration.rb +38 -0
  226. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  227. data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
  228. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
  229. data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
  230. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  231. data/lib/ddtrace/contrib/que/tracer.rb +3 -2
  232. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  233. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  234. data/lib/ddtrace/contrib/rack/integration.rb +7 -0
  235. data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
  236. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  237. data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
  238. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  239. data/lib/ddtrace/contrib/rails/patcher.rb +19 -5
  240. data/lib/ddtrace/contrib/rails/utils.rb +4 -0
  241. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
  242. data/lib/ddtrace/contrib/rake/integration.rb +1 -1
  243. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +3 -1
  244. data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
  245. data/lib/ddtrace/contrib/redis/ext.rb +1 -0
  246. data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
  247. data/lib/ddtrace/contrib/redis/quantize.rb +28 -0
  248. data/lib/ddtrace/contrib/redis/tags.rb +5 -1
  249. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  250. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  251. data/lib/ddtrace/contrib/registry.rb +2 -2
  252. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
  253. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  254. data/lib/ddtrace/contrib/resque/resque_job.rb +3 -1
  255. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
  256. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
  257. data/lib/ddtrace/contrib/rspec/example.rb +75 -0
  258. data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
  259. data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
  260. data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
  261. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  262. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  263. data/lib/ddtrace/contrib/shoryuken/tracer.rb +3 -1
  264. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
  265. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +5 -7
  266. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  267. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  268. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  269. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  270. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +5 -5
  271. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
  272. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  273. data/lib/ddtrace/contrib/sneakers/tracer.rb +16 -21
  274. data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
  275. data/lib/ddtrace/correlation.rb +1 -0
  276. data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
  277. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  278. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  279. data/lib/ddtrace/ext/app_types.rb +1 -0
  280. data/lib/ddtrace/ext/ci.rb +297 -0
  281. data/lib/ddtrace/ext/distributed.rb +8 -2
  282. data/lib/ddtrace/ext/git.rb +11 -0
  283. data/lib/ddtrace/ext/http.rb +1 -1
  284. data/lib/ddtrace/ext/runtime.rb +2 -1
  285. data/lib/ddtrace/ext/test.rb +24 -0
  286. data/lib/ddtrace/forced_tracing.rb +2 -0
  287. data/lib/ddtrace/logger.rb +1 -1
  288. data/lib/ddtrace/metrics.rb +10 -6
  289. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  290. data/lib/ddtrace/opentracer/span.rb +2 -6
  291. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  292. data/lib/ddtrace/patcher.rb +2 -3
  293. data/lib/ddtrace/pin.rb +3 -52
  294. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  295. data/lib/ddtrace/propagation/grpc_propagator.rb +17 -4
  296. data/lib/ddtrace/propagation/http_propagator.rb +17 -2
  297. data/lib/ddtrace/quantization/http.rb +1 -0
  298. data/lib/ddtrace/runtime/cgroup.rb +1 -1
  299. data/lib/ddtrace/runtime/container.rb +2 -2
  300. data/lib/ddtrace/runtime/identity.rb +4 -5
  301. data/lib/ddtrace/sampler.rb +1 -1
  302. data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
  303. data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
  304. data/lib/ddtrace/span.rb +7 -7
  305. data/lib/ddtrace/sync_writer.rb +7 -10
  306. data/lib/ddtrace/tracer.rb +23 -10
  307. data/lib/ddtrace/transport/http.rb +1 -3
  308. data/lib/ddtrace/transport/http/adapters/net.rb +9 -4
  309. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  310. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  311. data/lib/ddtrace/transport/http/builder.rb +2 -0
  312. data/lib/ddtrace/transport/http/traces.rb +2 -3
  313. data/lib/ddtrace/transport/io.rb +1 -1
  314. data/lib/ddtrace/transport/traces.rb +3 -0
  315. data/lib/ddtrace/utils.rb +10 -11
  316. data/lib/ddtrace/utils/forking.rb +52 -0
  317. data/lib/ddtrace/utils/time.rb +25 -1
  318. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  319. data/lib/ddtrace/version.rb +1 -1
  320. data/lib/ddtrace/workers.rb +5 -0
  321. data/lib/ddtrace/workers/async.rb +8 -0
  322. data/lib/ddtrace/workers/loop.rb +3 -0
  323. data/lib/ddtrace/workers/polling.rb +1 -0
  324. data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
  325. data/lib/ddtrace/workers/trace_writer.rb +9 -10
  326. data/lib/ddtrace/writer.rb +22 -4
  327. metadata +168 -358
  328. data/lib/ddtrace/augmentation.rb +0 -13
  329. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  330. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  331. data/lib/ddtrace/augmentation/shim.rb +0 -102
  332. data/lib/ddtrace/monkey.rb +0 -58
@@ -16,6 +16,7 @@ module Datadog
16
16
  TAG_FILTER_TYPE = 'grape.filter.type'.freeze
17
17
  TAG_ROUTE_ENDPOINT = 'grape.route.endpoint'.freeze
18
18
  TAG_ROUTE_PATH = 'grape.route.path'.freeze
19
+ TAG_ROUTE_METHOD = 'grape.route.method'.freeze
19
20
  end
20
21
  end
21
22
  end
@@ -22,51 +22,9 @@ module Datadog
22
22
  # Patch endpoints
23
23
  ::Grape::Endpoint.send(:include, Instrumentation)
24
24
 
25
- add_pin!
26
-
27
25
  # Subscribe to ActiveSupport events
28
26
  Datadog::Contrib::Grape::Endpoint.subscribe
29
27
  end
30
-
31
- def add_pin!
32
- # Attach a Pin object globally and set the service once
33
- pin = DeprecatedPin.new(
34
- get_option(:service_name),
35
- app: Ext::APP,
36
- app_type: Datadog::Ext::AppTypes::WEB,
37
- tracer: -> { get_option(:tracer) }
38
- )
39
- pin.onto(::Grape)
40
- end
41
-
42
- def get_option(option)
43
- Datadog.configuration[:grape].get_option(option)
44
- end
45
-
46
- # Implementation of deprecated Pin, which raises warnings when accessed.
47
- # To be removed when support for Datadog::Pin with Grape is removed.
48
- class DeprecatedPin < Datadog::Pin
49
- include Datadog::DeprecatedPin
50
-
51
- DEPRECATION_WARNING = %(
52
- Use of Datadog::Pin with Grape is DEPRECATED.
53
- Upgrade to the configuration API using the migration guide here:
54
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
55
-
56
- def tracer=(tracer)
57
- Datadog.configuration[:grape][:tracer] = tracer
58
- end
59
-
60
- def service_name=(service_name)
61
- Datadog.configuration[:grape][:service_name] = service_name
62
- end
63
-
64
- def log_deprecation_warning(method_name)
65
- do_once(method_name) do
66
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
67
- end
68
- end
69
- end
70
28
  end
71
29
  end
72
30
  end
@@ -15,20 +15,20 @@ module Datadog
15
15
  add_datadog_pin! { |c| yield(c) if block_given? }
16
16
  end
17
17
 
18
- def request_response(**keywords)
19
- trace(keywords) { yield }
18
+ def request_response(**keywords, &block)
19
+ trace(keywords, &block)
20
20
  end
21
21
 
22
- def client_streamer(**keywords)
23
- trace(keywords) { yield }
22
+ def client_streamer(**keywords, &block)
23
+ trace(keywords, &block)
24
24
  end
25
25
 
26
- def server_streamer(**keywords)
27
- trace(keywords) { yield }
26
+ def server_streamer(**keywords, &block)
27
+ trace(keywords, &block)
28
28
  end
29
29
 
30
- def bidi_streamer(**keywords)
31
- trace(keywords) { yield }
30
+ def bidi_streamer(**keywords, &block)
31
+ trace(keywords, &block)
32
32
  end
33
33
 
34
34
  private
@@ -8,7 +8,7 @@ module Datadog
8
8
  module GRPC
9
9
  module DatadogInterceptor
10
10
  # The DatadogInterceptor::Client implements the tracing strategy
11
- # for gRPC client-side endpoitns. This middleware compoent will
11
+ # for gRPC client-side endpoints. This middleware component will
12
12
  # inject trace context information into gRPC metadata prior to
13
13
  # sending the request to the server.
14
14
  class Client < Base
@@ -44,6 +44,7 @@ module Datadog
44
44
  def annotate!(span, metadata)
45
45
  metadata.each do |header, value|
46
46
  next if reserved_headers.include?(header)
47
+
47
48
  span.set_tag(header, value)
48
49
  end
49
50
 
@@ -19,49 +19,13 @@ module Datadog
19
19
  require 'ddtrace/contrib/grpc/datadog_interceptor'
20
20
  require 'ddtrace/contrib/grpc/intercept_with_datadog'
21
21
 
22
- add_pin!
23
-
24
22
  prepend_interceptor
25
23
  end
26
24
 
27
- def add_pin!
28
- DeprecatedPin.new(
29
- get_option(:service_name),
30
- app: Ext::APP,
31
- app_type: Datadog::Ext::AppTypes::WEB,
32
- tracer: -> { get_option(:tracer) }
33
- ).onto(::GRPC)
34
- end
35
-
36
25
  def prepend_interceptor
37
26
  ::GRPC::InterceptionContext
38
27
  .send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
39
28
  end
40
-
41
- def get_option(option)
42
- Datadog.configuration[:grpc].get_option(option)
43
- end
44
-
45
- # Implementation of deprecated Pin, which raises warnings when accessed.
46
- # To be removed when support for Datadog::Pin with GRPC is removed.
47
- class DeprecatedPin < Datadog::Pin
48
- include Datadog::DeprecatedPin
49
-
50
- DEPRECATION_WARNING = %(
51
- Use of Datadog::Pin with GRPC is DEPRECATED.
52
- Upgrade to the configuration API using the migration guide here:
53
- https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
54
-
55
- def service_name=(service_name)
56
- Datadog.configuration[:grpc][:service_name] = service_name
57
- end
58
-
59
- def log_deprecation_warning(method_name)
60
- do_once(method_name) do
61
- Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
62
- end
63
- end
64
- end
65
29
  end
66
30
  end
67
31
  end
@@ -27,9 +27,7 @@ module Datadog
27
27
  end
28
28
 
29
29
  def should_skip_distributed_tracing?(pin)
30
- if pin.config && pin.config.key?(:distributed_tracing)
31
- return !pin.config[:distributed_tracing]
32
- end
30
+ return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
33
31
 
34
32
  !Datadog.configuration[:http][:distributed_tracing]
35
33
  end
@@ -19,7 +19,7 @@ module Datadog
19
19
 
20
20
  # Span hook invoked after request is completed.
21
21
  def self.after_request(&block)
22
- if block_given?
22
+ if block
23
23
  # Set hook
24
24
  @after_request = block
25
25
  else
@@ -32,15 +32,14 @@ module Datadog
32
32
  module InstanceMethods
33
33
  include Datadog::Contrib::HttpAnnotationHelper
34
34
 
35
- def request(req, body = nil, &block) # :yield: +response+
35
+ # :yield: +response+
36
+ def request(req, body = nil, &block)
36
37
  host, = host_and_port(req)
37
38
  request_options = datadog_configuration(host)
38
39
  pin = datadog_pin(request_options)
39
40
  return super(req, body, &block) unless pin && pin.tracer
40
41
 
41
- if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
42
- return super(req, body, &block)
43
- end
42
+ return super(req, body, &block) if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
44
43
 
45
44
  pin.tracer.trace(Ext::SPAN_REQUEST, on_error: method(:annotate_span_with_error!)) do |span|
46
45
  begin
@@ -108,6 +107,7 @@ module Datadog
108
107
 
109
108
  def set_analytics_sample_rate(span, request_options)
110
109
  return unless analytics_enabled?(request_options)
110
+
111
111
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate(request_options))
112
112
  end
113
113
 
@@ -118,7 +118,7 @@ module Datadog
118
118
  @datadog_pin ||= Datadog::Pin.new(
119
119
  service,
120
120
  app: Ext::APP,
121
- app_type: Datadog::Ext::AppTypes::WEB,
121
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
122
122
  tracer: -> { config[:tracer] }
123
123
  )
124
124
 
@@ -146,7 +146,7 @@ module Datadog
146
146
  @default_datadog_pin ||= Datadog::Pin.new(
147
147
  service,
148
148
  app: Ext::APP,
149
- app_type: Datadog::Ext::AppTypes::WEB,
149
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
150
150
  tracer: -> { config[:tracer] }
151
151
  )
152
152
  end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/httpclient/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Httpclient
7
+ module Configuration
8
+ # Custom settings for the Httpclient integration
9
+ class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
15
+ option :analytics_enabled do |o|
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
17
+ o.lazy
18
+ end
19
+
20
+ option :analytics_sample_rate do |o|
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
22
+ o.lazy
23
+ end
24
+
25
+ option :distributed_tracing, default: true
26
+ option :service_name, default: Ext::SERVICE_NAME
27
+ option :split_by_domain, default: false
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,17 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Httpclient
4
+ # Httpclient integration constants
5
+ module Ext
6
+ APP = 'httpclient'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_HTTPCLIENT_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_HTTPCLIENT_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_HTTPCLIENT_ANALYTICS_SAMPLE_RATE'.freeze
12
+ SERVICE_NAME = 'httpclient'.freeze
13
+ SPAN_REQUEST = 'httpclient.request'.freeze
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,151 @@
1
+ require 'ddtrace/ext/app_types'
2
+ require 'ddtrace/ext/http'
3
+ require 'ddtrace/ext/net'
4
+ require 'ddtrace/ext/distributed'
5
+ require 'ddtrace/contrib/analytics'
6
+ require 'ddtrace/propagation/http_propagator'
7
+ require 'ddtrace/contrib/http_annotation_helper'
8
+
9
+ module Datadog
10
+ module Contrib
11
+ module Httpclient
12
+ # Instrumentation for Httpclient
13
+ module Instrumentation
14
+ def self.included(base)
15
+ base.send(:prepend, InstanceMethods)
16
+ end
17
+
18
+ # Instance methods for configuration
19
+ module InstanceMethods
20
+ include Datadog::Contrib::HttpAnnotationHelper
21
+
22
+ def do_get_block(req, proxy, conn, &block)
23
+ host = req.header.request_uri.host
24
+ request_options = datadog_configuration(host)
25
+ pin = datadog_pin(request_options)
26
+
27
+ return super unless pin && pin.tracer
28
+
29
+ pin.tracer.trace(Ext::SPAN_REQUEST, on_error: method(:annotate_span_with_error!)) do |span|
30
+ begin
31
+ request_options[:service_name] = pin.service_name
32
+ span.service = service_name(host, request_options)
33
+ span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
34
+
35
+ if pin.tracer.enabled && !should_skip_distributed_tracing?(pin)
36
+ Datadog::HTTPPropagator.inject!(span.context, req.header)
37
+ end
38
+
39
+ # Add additional request specific tags to the span.
40
+ annotate_span_with_request!(span, req, request_options)
41
+ rescue StandardError => e
42
+ logger.error("error preparing span for httpclient request: #{e}, Source: #{e.backtrace}")
43
+ ensure
44
+ res = super
45
+ end
46
+
47
+ # Add additional response specific tags to the span.
48
+ annotate_span_with_response!(span, res)
49
+
50
+ res
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def annotate_span_with_request!(span, req, req_options)
57
+ http_method = req.header.request_method.upcase
58
+ uri = req.header.request_uri
59
+
60
+ span.resource = http_method
61
+ span.set_tag(Datadog::Ext::HTTP::METHOD, http_method)
62
+ span.set_tag(Datadog::Ext::HTTP::URL, uri.path)
63
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, uri.host)
64
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, uri.port)
65
+
66
+ # Tag as an external peer service
67
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
68
+
69
+ set_analytics_sample_rate(span, req_options)
70
+ end
71
+
72
+ def annotate_span_with_response!(span, response)
73
+ return unless response && response.status
74
+
75
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.status)
76
+
77
+ case response.status.to_i
78
+ when 400...599
79
+ span.set_error(["Error #{response.status}", response.body])
80
+ end
81
+ end
82
+
83
+ def annotate_span_with_error!(span, error)
84
+ span.set_error(error)
85
+ end
86
+
87
+ def datadog_pin(config = Datadog.configuration[:httprb])
88
+ service = config[:service_name]
89
+ tracer = config[:tracer]
90
+
91
+ @datadog_pin ||= begin
92
+ Datadog::Pin.new(
93
+ service,
94
+ app: Ext::APP,
95
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
96
+ tracer: -> { config[:tracer] }
97
+ )
98
+ end
99
+
100
+ if @datadog_pin.service_name == default_datadog_pin.service_name && @datadog_pin.service_name != service
101
+ @datadog_pin.service = service
102
+ end
103
+ if @datadog_pin.tracer == default_datadog_pin.tracer && @datadog_pin.tracer != tracer
104
+ @datadog_pin.tracer = tracer
105
+ end
106
+
107
+ @datadog_pin
108
+ end
109
+
110
+ def default_datadog_pin
111
+ config = Datadog.configuration[:httpclient]
112
+ service = config[:service_name]
113
+
114
+ @default_datadog_pin ||= begin
115
+ Datadog::Pin.new(
116
+ service,
117
+ app: Ext::APP,
118
+ app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
119
+ tracer: -> { config[:tracer] }
120
+ )
121
+ end
122
+ end
123
+
124
+ def datadog_configuration(host = :default)
125
+ Datadog.configuration[:httpclient, host]
126
+ end
127
+
128
+ def analytics_enabled?(request_options)
129
+ Contrib::Analytics.enabled?(request_options[:analytics_enabled])
130
+ end
131
+
132
+ def logger
133
+ Datadog.logger
134
+ end
135
+
136
+ def should_skip_distributed_tracing?(pin)
137
+ return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
138
+
139
+ !Datadog.configuration[:httpclient][:distributed_tracing]
140
+ end
141
+
142
+ def set_analytics_sample_rate(span, request_options)
143
+ return unless analytics_enabled?(request_options)
144
+
145
+ Contrib::Analytics.set_sample_rate(span, request_options[:analytics_sample_rate])
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,43 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/httpclient/configuration/settings'
3
+ require 'ddtrace/contrib/configuration/resolvers/pattern_resolver'
4
+ require 'ddtrace/contrib/httpclient/patcher'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Httpclient
9
+ # Description of Httpclient integration
10
+ class Integration
11
+ include Contrib::Integration
12
+
13
+ MINIMUM_VERSION = Gem::Version.new('2.2.0')
14
+
15
+ register_as :httpclient
16
+
17
+ def self.version
18
+ Gem.loaded_specs['httpclient'] && Gem.loaded_specs['httpclient'].version
19
+ end
20
+
21
+ def self.loaded?
22
+ !defined?(::HTTPClient).nil?
23
+ end
24
+
25
+ def self.compatible?
26
+ super && version >= MINIMUM_VERSION
27
+ end
28
+
29
+ def default_configuration
30
+ Configuration::Settings.new
31
+ end
32
+
33
+ def patcher
34
+ Patcher
35
+ end
36
+
37
+ def resolver
38
+ @resolver ||= Contrib::Configuration::Resolvers::PatternResolver.new
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end