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
@@ -17,9 +17,9 @@ module Datadog
17
17
  end
18
18
  end
19
19
 
20
- def each
20
+ def each(&block)
21
21
  @mutex.synchronize do
22
- @data.each { |_, entry| yield(entry) }
22
+ @data.each_value(&block)
23
23
  end
24
24
  end
25
25
 
@@ -24,6 +24,7 @@ module Datadog
24
24
 
25
25
  option :service_name, default: Ext::SERVICE_NAME
26
26
  option :workers, default: []
27
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
27
28
  end
28
29
  end
29
30
  end
@@ -11,7 +11,7 @@ module Datadog
11
11
 
12
12
  MINIMUM_VERSION = Gem::Version.new('1.0')
13
13
  # Maximum is first version it's NOT compatible with (not inclusive)
14
- MAXIMUM_VERSION = Gem::Version.new('2.0')
14
+ MAXIMUM_VERSION = Gem::Version.new('3.0')
15
15
 
16
16
  register_as :resque, auto_patch: true
17
17
 
@@ -44,11 +44,12 @@ module Datadog
44
44
  def forked?
45
45
  pin = Datadog::Pin.get_from(::Resque)
46
46
  return false unless pin
47
+
47
48
  pin.config[:forked] == true
48
49
  end
49
50
 
50
51
  def span_options
51
- { service: datadog_configuration[:service_name] }
52
+ { service: datadog_configuration[:service_name], on_error: datadog_configuration[:error_handler] }
52
53
  end
53
54
 
54
55
  def tracer
@@ -76,5 +77,6 @@ Resque.after_fork do
76
77
 
77
78
  # Clean the state so no CoW happens
78
79
  next if configuration[:tracer].nil?
80
+
79
81
  configuration[:tracer].provider.context = nil
80
82
  end
@@ -54,9 +54,7 @@ module Datadog
54
54
  yield(span).tap do |response|
55
55
  # Verify return value is a response
56
56
  # If so, add additional tags.
57
- if response.is_a?(::RestClient::Response)
58
- span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
59
- end
57
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code) if response.is_a?(::RestClient::Response)
60
58
  end
61
59
  rescue ::RestClient::ExceptionWithResponse => e
62
60
  span.set_error(e) if Datadog::Ext::HTTP::ERROR_RANGE.cover?(e.http_code)
@@ -0,0 +1,28 @@
1
+ require 'ddtrace/contrib/configuration/settings'
2
+ require 'ddtrace/contrib/rspec/ext'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module RSpec
7
+ module Configuration
8
+ # Custom settings for the RSpec 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 :service_name do |o|
16
+ o.default { Datadog.configuration.service || Ext::SERVICE_NAME }
17
+ o.lazy
18
+ end
19
+
20
+ option :operation_name do |o|
21
+ o.default { ENV.key?(Ext::ENV_OPERATION_NAME) ? ENV[Ext::ENV_OPERATION_NAME] : Ext::OPERATION_NAME }
22
+ o.lazy
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,75 @@
1
+ module Datadog
2
+ module Contrib
3
+ module RSpec
4
+ # Instrument RSpec::Core::Example
5
+ module Example
6
+ def self.included(base)
7
+ base.send(:prepend, InstanceMethods)
8
+ end
9
+
10
+ # Instance methods for configuration
11
+ module InstanceMethods
12
+ def run(example_group_instance, reporter)
13
+ return super unless configuration[:enabled]
14
+
15
+ test_name = full_description.strip
16
+ if metadata[:description].empty?
17
+ # for unnamed it blocks this appends something like "example at ./spec/some_spec.rb:10"
18
+ test_name += " #{description}"
19
+ end
20
+
21
+ trace_options = {
22
+ app: Ext::APP,
23
+ resource: test_name,
24
+ service: configuration[:service_name],
25
+ span_type: Datadog::Ext::AppTypes::TEST,
26
+ tags: tags.merge(Datadog.configuration.tags)
27
+ }
28
+
29
+ tracer.trace(configuration[:operation_name], trace_options) do |span|
30
+ span.set_tag(Datadog::Ext::Test::TAG_FRAMEWORK, Ext::FRAMEWORK)
31
+ span.set_tag(Datadog::Ext::Test::TAG_NAME, test_name)
32
+ span.set_tag(Datadog::Ext::Test::TAG_SUITE, file_path)
33
+ span.set_tag(Datadog::Ext::Test::TAG_TYPE, Ext::TEST_TYPE)
34
+ span.set_tag(Datadog::Ext::Test::TAG_SPAN_KIND, Datadog::Ext::AppTypes::TEST)
35
+
36
+ # Measure service stats
37
+ Contrib::Analytics.set_measured(span)
38
+
39
+ result = super
40
+
41
+ case execution_result.status
42
+ when :passed
43
+ span.set_tag(Datadog::Ext::Test::TAG_STATUS, Datadog::Ext::Test::Status::PASS)
44
+ when :failed
45
+ span.status = 1
46
+ span.set_tag(Datadog::Ext::Test::TAG_STATUS, Datadog::Ext::Test::Status::FAIL)
47
+ span.set_error(execution_result.exception)
48
+ else
49
+ if execution_result.example_skipped?
50
+ span.set_tag(Datadog::Ext::Test::TAG_STATUS, Datadog::Ext::Test::Status::SKIP)
51
+ end
52
+ end
53
+
54
+ result
55
+ end
56
+ end
57
+
58
+ private
59
+
60
+ def configuration
61
+ Datadog.configuration[:rspec]
62
+ end
63
+
64
+ def tracer
65
+ configuration[:tracer]
66
+ end
67
+
68
+ def tags
69
+ @tags ||= Datadog::Ext::CI.tags(ENV)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,16 @@
1
+ module Datadog
2
+ module Contrib
3
+ module RSpec
4
+ # RSpec integration constants
5
+ module Ext
6
+ APP = 'rspec'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_RSPEC_ENABLED'.freeze
8
+ ENV_OPERATION_NAME = 'DD_TRACE_RSPEC_OPERATION_NAME'.freeze
9
+ FRAMEWORK = 'rspec'.freeze
10
+ OPERATION_NAME = 'rspec.example'.freeze
11
+ SERVICE_NAME = 'rspec'.freeze
12
+ TEST_TYPE = 'test'.freeze
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,46 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/rspec/configuration/settings'
3
+ require 'ddtrace/contrib/rspec/patcher'
4
+ require 'ddtrace/contrib/integration'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module RSpec
9
+ # Description of RSpec integration
10
+ class Integration
11
+ include Contrib::Integration
12
+
13
+ MINIMUM_VERSION = Gem::Version.new('3.0.0')
14
+
15
+ register_as :rspec, auto_patch: true
16
+
17
+ def self.version
18
+ Gem.loaded_specs['rspec'] \
19
+ && Gem.loaded_specs['rspec'].version
20
+ end
21
+
22
+ def self.loaded?
23
+ !defined?(::RSpec).nil? && !defined?(::RSpec::Core).nil? && \
24
+ !defined?(::RSpec::Core::Example).nil?
25
+ end
26
+
27
+ def self.compatible?
28
+ super && version >= MINIMUM_VERSION
29
+ end
30
+
31
+ # test environments should not auto instrument test libraries
32
+ def auto_instrument?
33
+ false
34
+ end
35
+
36
+ def default_configuration
37
+ Configuration::Settings.new
38
+ end
39
+
40
+ def patcher
41
+ Patcher
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,23 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/contrib/rspec/example'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module RSpec
7
+ # Patcher enables patching of 'rspec' module.
8
+ module Patcher
9
+ include Contrib::Patcher
10
+
11
+ module_function
12
+
13
+ def target_version
14
+ Integration.version
15
+ end
16
+
17
+ def patch
18
+ ::RSpec::Core::Example.send(:include, Example)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -30,12 +30,11 @@ module Datadog
30
30
 
31
31
  def parse_opts(sql, opts, db_opts, dataset = nil)
32
32
  # Prepared statements don't provide their sql query in the +sql+ parameter.
33
- unless sql.is_a?(String)
34
- if dataset && dataset.respond_to?(:prepared_sql) && (resolved_sql = dataset.prepared_sql)
35
- # The dataset contains the resolved SQL query and prepared statement name.
36
- prepared_name = dataset.prepared_statement_name
37
- sql = resolved_sql
38
- end
33
+ if !sql.is_a?(String) && (dataset && dataset.respond_to?(:prepared_sql) &&
34
+ (resolved_sql = dataset.prepared_sql))
35
+ # The dataset contains the resolved SQL query and prepared statement name.
36
+ prepared_name = dataset.prepared_statement_name
37
+ sql = resolved_sql
39
38
  end
40
39
 
41
40
  {
@@ -22,6 +22,7 @@ module Datadog
22
22
  end
23
23
 
24
24
  option :service_name, default: Ext::SERVICE_NAME
25
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
25
26
  end
26
27
  end
27
28
  end
@@ -8,10 +8,12 @@ module Datadog
8
8
  def initialize(options = {})
9
9
  @tracer = options[:tracer] || configuration[:tracer]
10
10
  @shoryuken_service = options[:service_name] || configuration[:service_name]
11
+ @error_handler = options[:error_handler] || configuration[:error_handler]
11
12
  end
12
13
 
13
14
  def call(worker_instance, queue, sqs_msg, body)
14
- @tracer.trace(Ext::SPAN_JOB, service: @shoryuken_service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
15
+ @tracer.trace(Ext::SPAN_JOB, service: @shoryuken_service, span_type: Datadog::Ext::AppTypes::WORKER,
16
+ on_error: @error_handler) do |span|
15
17
  # Set analytics sample rate
16
18
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
17
19
  Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
@@ -29,6 +29,7 @@ module Datadog
29
29
 
30
30
  option :service_name, default: Ext::SERVICE_NAME
31
31
  option :client_service_name, default: Ext::CLIENT_SERVICE_NAME
32
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
32
33
  end
33
34
  end
34
35
  end
@@ -11,6 +11,7 @@ module Datadog
11
11
  def initialize(options = {})
12
12
  super
13
13
  @sidekiq_service = options[:service_name] || configuration[:service_name]
14
+ @error_handler = options[:error_handler] || configuration[:error_handler]
14
15
  end
15
16
 
16
17
  def call(worker, job, queue)
@@ -19,7 +20,8 @@ module Datadog
19
20
  service = worker_config(resource, :service_name) || @sidekiq_service
20
21
  tag_args = worker_config(resource, :tag_args) || configuration[:tag_args]
21
22
 
22
- @tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER) do |span|
23
+ @tracer.trace(Ext::SPAN_JOB, service: service, span_type: Datadog::Ext::AppTypes::WORKER,
24
+ on_error: @error_handler) do |span|
23
25
  span.resource = resource
24
26
  # Set analytics sample rate
25
27
  if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
@@ -35,9 +37,7 @@ module Datadog
35
37
  span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
36
38
  span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
37
39
  span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Time.now.utc.to_f - job['enqueued_at'].to_f))
38
- if tag_args && !job['args'].nil? && !job['args'].empty?
39
- span.set_tag(Ext::TAG_JOB_ARGS, job['args'])
40
- end
40
+ span.set_tag(Ext::TAG_JOB_ARGS, job['args']) if tag_args && !job['args'].nil? && !job['args'].empty?
41
41
 
42
42
  yield
43
43
  end
@@ -57,9 +57,7 @@ module Datadog
57
57
  nil
58
58
  end
59
59
 
60
- if worker_klass.respond_to?(:datadog_tracer_config)
61
- worker_klass.datadog_tracer_config[key]
62
- end
60
+ worker_klass.datadog_tracer_config[key] if worker_klass.respond_to?(:datadog_tracer_config)
63
61
  end
64
62
  end
65
63
  end
@@ -31,7 +31,6 @@ module Datadog
31
31
  job['class'].to_s
32
32
  end
33
33
 
34
- #
35
34
  def delay_extension_class(job)
36
35
  clazz, method = YAML.parse(job['args'].first).children.first.children
37
36
 
@@ -23,9 +23,7 @@ module Datadog
23
23
  {}.tap do |result|
24
24
  headers.each do |header|
25
25
  rack_header = header_to_rack_header(header)
26
- if env.key?(rack_header)
27
- result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header]
28
- end
26
+ result[Datadog::Ext::HTTP::RequestHeaders.to_tag(header)] = env[rack_header] if env.key?(rack_header)
29
27
  end
30
28
  end
31
29
  end
@@ -18,9 +18,7 @@ module Datadog
18
18
  # Try a case-insensitive lookup
19
19
  uppercased_header = header.to_s.upcase
20
20
  matching_header = headers.keys.find { |h| h.upcase == uppercased_header }
21
- if matching_header
22
- result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header]
23
- end
21
+ result[Datadog::Ext::HTTP::ResponseHeaders.to_tag(header)] = headers[matching_header] if matching_header
24
22
  end
25
23
  end
26
24
  end
@@ -110,9 +110,7 @@ module Datadog
110
110
 
111
111
  span.set_tag(Ext::TAG_APP_NAME, settings.name || settings.superclass.name)
112
112
  span.set_tag(Ext::TAG_ROUTE_PATH, @datadog_route)
113
- if request.script_name && !request.script_name.empty?
114
- span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
115
- end
113
+ span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name) if request.script_name && !request.script_name.empty?
116
114
 
117
115
  rack_request_span = env[Datadog::Contrib::Rack::TraceMiddleware::RACK_REQUEST_SPAN]
118
116
  rack_request_span.resource = span.resource if rack_request_span
@@ -8,13 +8,15 @@ module Datadog
8
8
  module Sinatra
9
9
  # Middleware used for automatically tagging configured headers and handle request span
10
10
  class TracerMiddleware
11
- def initialize(app, app_instance: nil)
11
+ def initialize(app, opt = {})
12
12
  @app = app
13
- @app_instance = app_instance
13
+ @app_instance = opt[:app_instance]
14
14
  end
15
15
 
16
16
  # rubocop:disable Metrics/AbcSize
17
17
  # rubocop:disable Metrics/MethodLength
18
+ # rubocop:disable Metrics/CyclomaticComplexity
19
+ # rubocop:disable Metrics/PerceivedComplexity
18
20
  def call(env)
19
21
  # Set the trace context (e.g. distributed tracing)
20
22
  if configuration[:distributed_tracing] && tracer.provider.context.trace_id.nil?
@@ -40,9 +42,7 @@ module Datadog
40
42
  request = ::Sinatra::Request.new(env)
41
43
  span.set_tag(Datadog::Ext::HTTP::URL, request.path)
42
44
  span.set_tag(Datadog::Ext::HTTP::METHOD, request.request_method)
43
- if request.script_name && !request.script_name.empty?
44
- span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name)
45
- end
45
+ span.set_tag(Ext::TAG_SCRIPT_NAME, request.script_name) if request.script_name && !request.script_name.empty?
46
46
 
47
47
  span.set_tag(Ext::TAG_APP_NAME, @app_instance.settings.name)
48
48
 
@@ -24,6 +24,7 @@ module Datadog
24
24
  end
25
25
 
26
26
  option :service_name, default: Ext::SERVICE_NAME
27
+ option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
27
28
  option :tag_body, default: false
28
29
  end
29
30
  end
@@ -5,17 +5,17 @@ module Datadog
5
5
  module Sneakers
6
6
  # Sneakers integration constants
7
7
  module Ext
8
- APP = 'sneakers'.freeze
9
- ENV_ENABLED = 'DD_TRACE_SNEAKERS_ENABLED'.freeze
10
- ENV_ANALYTICS_ENABLED = 'DD_TRACE_SNEAKERS_ANALYTICS_ENABLED'.freeze
11
- ENV_ANALYTICS_ENABLED_OLD = 'DD_SNEAKERS_ANALYTICS_ENABLED'.freeze
12
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE'.freeze
13
- ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SNEAKERS_ANALYTICS_SAMPLE_RATE'.freeze
14
- SERVICE_NAME = 'sneakers'.freeze
15
- SPAN_JOB = 'sneakers.job'.freeze
16
- TAG_JOB_ROUTING_KEY = 'sneakers.routing_key'.freeze
17
- TAG_JOB_QUEUE = 'sneakers.queue'.freeze
18
- TAG_JOB_BODY = 'sneakers.body'.freeze
8
+ APP = 'sneakers'
9
+ ENV_ENABLED = 'DD_TRACE_SNEAKERS_ENABLED'
10
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_SNEAKERS_ANALYTICS_ENABLED'
11
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_SNEAKERS_ANALYTICS_ENABLED'
12
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SNEAKERS_ANALYTICS_SAMPLE_RATE'
13
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_SNEAKERS_ANALYTICS_SAMPLE_RATE'
14
+ SERVICE_NAME = 'sneakers'
15
+ SPAN_JOB = 'sneakers.job'
16
+ TAG_JOB_ROUTING_KEY = 'sneakers.routing_key'
17
+ TAG_JOB_QUEUE = 'sneakers.queue'
18
+ TAG_JOB_BODY = 'sneakers.body'
19
19
  end
20
20
  end
21
21
  end