ddtrace 0.48.0 → 0.51.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (656) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +250 -68
  3. data/.circleci/images/primary/Dockerfile-2.1.10 +1 -1
  4. data/.circleci/images/primary/Dockerfile-2.2.10 +1 -1
  5. data/.circleci/images/primary/Dockerfile-2.3.8 +4 -2
  6. data/.circleci/images/primary/{Dockerfile-2.6.4 → Dockerfile-2.4.10} +5 -3
  7. data/.circleci/images/primary/{Dockerfile-2.4.6 → Dockerfile-2.5.9} +3 -3
  8. data/.circleci/images/primary/{Dockerfile-2.5.6 → Dockerfile-2.6.7} +3 -3
  9. data/.circleci/images/primary/{Dockerfile-2.7.0 → Dockerfile-2.7.3} +3 -3
  10. data/.circleci/images/primary/{Dockerfile-3.0.0 → Dockerfile-3.0.1} +3 -3
  11. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +3 -3
  12. data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +1 -1
  13. data/.circleci/images/primary/{Dockerfile-truffleruby-21.0.0 → Dockerfile-truffleruby-21.1.0} +2 -2
  14. data/.dd-ci/ci-app-spec.json +31 -0
  15. data/.dockerignore +0 -1
  16. data/.gitattributes +1 -0
  17. data/.github/workflows/test-head.yaml +34 -0
  18. data/.gitignore +0 -1
  19. data/.rubocop.yml +13 -9
  20. data/.rubocop_todo.yml +7 -8
  21. data/Appraisals +206 -182
  22. data/CHANGELOG.md +154 -0
  23. data/Gemfile +6 -3
  24. data/Rakefile +331 -333
  25. data/benchmarks/data/profiler-submission-marshal.gz +0 -0
  26. data/benchmarks/profiler_sample_loop.rb +69 -0
  27. data/benchmarks/profiler_submission.rb +93 -0
  28. data/ddtrace.gemspec +2 -2
  29. data/docker-compose.yml +14 -68
  30. data/docs/GettingStarted.md +59 -13
  31. data/gemfiles/jruby_9.2.0.0_contrib.gemfile +82 -0
  32. data/gemfiles/jruby_9.2.0.0_contrib.gemfile.lock +1571 -0
  33. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile +36 -0
  34. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile.lock +159 -0
  35. data/gemfiles/jruby_9.2.0.0_core_old.gemfile +35 -0
  36. data/gemfiles/jruby_9.2.0.0_core_old.gemfile.lock +155 -0
  37. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile +36 -0
  38. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile.lock +176 -0
  39. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile +36 -0
  40. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile.lock +208 -0
  41. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile +36 -0
  42. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile.lock +208 -0
  43. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile +41 -0
  44. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile.lock +273 -0
  45. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile +41 -0
  46. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile.lock +273 -0
  47. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile +42 -0
  48. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile.lock +275 -0
  49. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile +42 -0
  50. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile.lock +275 -0
  51. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile +43 -0
  52. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile.lock +281 -0
  53. data/gemfiles/jruby_9.2.0.0_rails5_semantic_logger.gemfile +41 -0
  54. data/gemfiles/jruby_9.2.0.0_rails5_semantic_logger.gemfile.lock +272 -0
  55. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile +41 -0
  56. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile.lock +292 -0
  57. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile +41 -0
  58. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile.lock +292 -0
  59. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile +42 -0
  60. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile.lock +294 -0
  61. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile +42 -0
  62. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile.lock +299 -0
  63. data/gemfiles/jruby_9.2.0.0_rails61_semantic_logger.gemfile +41 -0
  64. data/gemfiles/jruby_9.2.0.0_rails61_semantic_logger.gemfile.lock +291 -0
  65. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile +41 -0
  66. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile.lock +289 -0
  67. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile +41 -0
  68. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile.lock +289 -0
  69. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile +42 -0
  70. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile.lock +291 -0
  71. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile +42 -0
  72. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile.lock +291 -0
  73. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile +43 -0
  74. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile.lock +297 -0
  75. data/gemfiles/jruby_9.2.0.0_rails6_semantic_logger.gemfile +41 -0
  76. data/gemfiles/jruby_9.2.0.0_rails6_semantic_logger.gemfile.lock +288 -0
  77. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile +37 -0
  78. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile.lock +182 -0
  79. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile +37 -0
  80. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile.lock +182 -0
  81. data/gemfiles/jruby_9.2.18.0_contrib.gemfile +82 -0
  82. data/gemfiles/jruby_9.2.18.0_contrib.gemfile.lock +1571 -0
  83. data/gemfiles/jruby_9.2.18.0_contrib_old.gemfile +36 -0
  84. data/gemfiles/jruby_9.2.18.0_contrib_old.gemfile.lock +159 -0
  85. data/gemfiles/jruby_9.2.18.0_core_old.gemfile +35 -0
  86. data/gemfiles/jruby_9.2.18.0_core_old.gemfile.lock +155 -0
  87. data/gemfiles/jruby_9.2.18.0_cucumber3.gemfile +36 -0
  88. data/gemfiles/jruby_9.2.18.0_cucumber3.gemfile.lock +176 -0
  89. data/gemfiles/jruby_9.2.18.0_cucumber4.gemfile +36 -0
  90. data/gemfiles/jruby_9.2.18.0_cucumber4.gemfile.lock +208 -0
  91. data/gemfiles/jruby_9.2.18.0_cucumber5.gemfile +36 -0
  92. data/gemfiles/jruby_9.2.18.0_cucumber5.gemfile.lock +208 -0
  93. data/gemfiles/jruby_9.2.18.0_rails5_mysql2.gemfile +41 -0
  94. data/gemfiles/jruby_9.2.18.0_rails5_mysql2.gemfile.lock +273 -0
  95. data/gemfiles/jruby_9.2.18.0_rails5_postgres.gemfile +41 -0
  96. data/gemfiles/jruby_9.2.18.0_rails5_postgres.gemfile.lock +273 -0
  97. data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis.gemfile +42 -0
  98. data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis.gemfile.lock +275 -0
  99. data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis_activesupport.gemfile +42 -0
  100. data/gemfiles/jruby_9.2.18.0_rails5_postgres_redis_activesupport.gemfile.lock +275 -0
  101. data/gemfiles/jruby_9.2.18.0_rails5_postgres_sidekiq.gemfile +43 -0
  102. data/gemfiles/jruby_9.2.18.0_rails5_postgres_sidekiq.gemfile.lock +281 -0
  103. data/gemfiles/jruby_9.2.18.0_rails5_semantic_logger.gemfile +41 -0
  104. data/gemfiles/jruby_9.2.18.0_rails5_semantic_logger.gemfile.lock +272 -0
  105. data/gemfiles/jruby_9.2.18.0_rails61_mysql2.gemfile +41 -0
  106. data/gemfiles/jruby_9.2.18.0_rails61_mysql2.gemfile.lock +292 -0
  107. data/gemfiles/jruby_9.2.18.0_rails61_postgres.gemfile +41 -0
  108. data/gemfiles/jruby_9.2.18.0_rails61_postgres.gemfile.lock +292 -0
  109. data/gemfiles/jruby_9.2.18.0_rails61_postgres_redis.gemfile +42 -0
  110. data/gemfiles/jruby_9.2.18.0_rails61_postgres_redis.gemfile.lock +294 -0
  111. data/gemfiles/jruby_9.2.18.0_rails61_postgres_sidekiq.gemfile +42 -0
  112. data/gemfiles/jruby_9.2.18.0_rails61_postgres_sidekiq.gemfile.lock +299 -0
  113. data/gemfiles/jruby_9.2.18.0_rails61_semantic_logger.gemfile +41 -0
  114. data/gemfiles/jruby_9.2.18.0_rails61_semantic_logger.gemfile.lock +291 -0
  115. data/gemfiles/jruby_9.2.18.0_rails6_mysql2.gemfile +41 -0
  116. data/gemfiles/jruby_9.2.18.0_rails6_mysql2.gemfile.lock +289 -0
  117. data/gemfiles/jruby_9.2.18.0_rails6_postgres.gemfile +41 -0
  118. data/gemfiles/jruby_9.2.18.0_rails6_postgres.gemfile.lock +289 -0
  119. data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis.gemfile +42 -0
  120. data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis.gemfile.lock +291 -0
  121. data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis_activesupport.gemfile +42 -0
  122. data/gemfiles/jruby_9.2.18.0_rails6_postgres_redis_activesupport.gemfile.lock +291 -0
  123. data/gemfiles/jruby_9.2.18.0_rails6_postgres_sidekiq.gemfile +43 -0
  124. data/gemfiles/jruby_9.2.18.0_rails6_postgres_sidekiq.gemfile.lock +297 -0
  125. data/gemfiles/jruby_9.2.18.0_rails6_semantic_logger.gemfile +41 -0
  126. data/gemfiles/jruby_9.2.18.0_rails6_semantic_logger.gemfile.lock +288 -0
  127. data/gemfiles/jruby_9.2.18.0_resque2_redis3.gemfile +37 -0
  128. data/gemfiles/jruby_9.2.18.0_resque2_redis3.gemfile.lock +182 -0
  129. data/gemfiles/jruby_9.2.18.0_resque2_redis4.gemfile +37 -0
  130. data/gemfiles/jruby_9.2.18.0_resque2_redis4.gemfile.lock +182 -0
  131. data/gemfiles/ruby_2.1.10_contrib_old.gemfile +68 -0
  132. data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +310 -0
  133. data/gemfiles/ruby_2.1.10_core_old.gemfile +34 -0
  134. data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +120 -0
  135. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +39 -0
  136. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +193 -0
  137. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +40 -0
  138. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +202 -0
  139. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +42 -0
  140. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +212 -0
  141. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +39 -0
  142. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +201 -0
  143. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +41 -0
  144. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +220 -0
  145. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +40 -0
  146. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +210 -0
  147. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +39 -0
  148. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +220 -0
  149. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +39 -0
  150. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +220 -0
  151. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +41 -0
  152. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +239 -0
  153. data/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile +39 -0
  154. data/gemfiles/ruby_2.1.10_rails4_semantic_logger.gemfile.lock +218 -0
  155. data/gemfiles/ruby_2.2.10_contrib.gemfile +76 -0
  156. data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +1499 -0
  157. data/gemfiles/ruby_2.2.10_core_old.gemfile +34 -0
  158. data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +120 -0
  159. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +39 -0
  160. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +193 -0
  161. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +40 -0
  162. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +202 -0
  163. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +41 -0
  164. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +209 -0
  165. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +39 -0
  166. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +201 -0
  167. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +41 -0
  168. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +220 -0
  169. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +40 -0
  170. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +210 -0
  171. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +39 -0
  172. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +220 -0
  173. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +39 -0
  174. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +220 -0
  175. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +41 -0
  176. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +239 -0
  177. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +41 -0
  178. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +231 -0
  179. data/gemfiles/ruby_2.2.10_rails4_semantic_logger.gemfile +39 -0
  180. data/gemfiles/ruby_2.2.10_rails4_semantic_logger.gemfile.lock +218 -0
  181. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +39 -0
  182. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +236 -0
  183. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +39 -0
  184. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +236 -0
  185. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +40 -0
  186. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +238 -0
  187. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +40 -0
  188. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +238 -0
  189. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +41 -0
  190. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +247 -0
  191. data/gemfiles/ruby_2.2.10_rails5_semantic_logger.gemfile +39 -0
  192. data/gemfiles/ruby_2.2.10_rails5_semantic_logger.gemfile.lock +234 -0
  193. data/gemfiles/ruby_2.3.8_contrib.gemfile +75 -0
  194. data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +1508 -0
  195. data/gemfiles/ruby_2.3.8_contrib_old.gemfile +34 -0
  196. data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +123 -0
  197. data/gemfiles/ruby_2.3.8_core_old.gemfile +33 -0
  198. data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +119 -0
  199. data/gemfiles/ruby_2.3.8_cucumber3.gemfile +34 -0
  200. data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +140 -0
  201. data/gemfiles/ruby_2.3.8_cucumber4.gemfile +34 -0
  202. data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +170 -0
  203. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +38 -0
  204. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +192 -0
  205. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +39 -0
  206. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +201 -0
  207. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +40 -0
  208. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +208 -0
  209. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +38 -0
  210. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +200 -0
  211. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +40 -0
  212. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +219 -0
  213. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +39 -0
  214. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +209 -0
  215. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +38 -0
  216. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +219 -0
  217. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +38 -0
  218. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +219 -0
  219. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +40 -0
  220. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +238 -0
  221. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +40 -0
  222. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +230 -0
  223. data/gemfiles/ruby_2.3.8_rails4_semantic_logger.gemfile +38 -0
  224. data/gemfiles/ruby_2.3.8_rails4_semantic_logger.gemfile.lock +218 -0
  225. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +37 -0
  226. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +230 -0
  227. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +37 -0
  228. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +230 -0
  229. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +38 -0
  230. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +232 -0
  231. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +38 -0
  232. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +232 -0
  233. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +39 -0
  234. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +241 -0
  235. data/gemfiles/ruby_2.3.8_rails5_semantic_logger.gemfile +37 -0
  236. data/gemfiles/ruby_2.3.8_rails5_semantic_logger.gemfile.lock +229 -0
  237. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +35 -0
  238. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +146 -0
  239. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +35 -0
  240. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +146 -0
  241. data/gemfiles/ruby_2.4.10_contrib.gemfile +81 -0
  242. data/gemfiles/ruby_2.4.10_contrib.gemfile.lock +1596 -0
  243. data/gemfiles/ruby_2.4.10_contrib_old.gemfile +39 -0
  244. data/gemfiles/ruby_2.4.10_contrib_old.gemfile.lock +157 -0
  245. data/gemfiles/ruby_2.4.10_core_old.gemfile +38 -0
  246. data/gemfiles/ruby_2.4.10_core_old.gemfile.lock +153 -0
  247. data/gemfiles/ruby_2.4.10_cucumber3.gemfile +39 -0
  248. data/gemfiles/ruby_2.4.10_cucumber3.gemfile.lock +174 -0
  249. data/gemfiles/ruby_2.4.10_cucumber4.gemfile +39 -0
  250. data/gemfiles/ruby_2.4.10_cucumber4.gemfile.lock +204 -0
  251. data/gemfiles/ruby_2.4.10_rails5_mysql2.gemfile +42 -0
  252. data/gemfiles/ruby_2.4.10_rails5_mysql2.gemfile.lock +264 -0
  253. data/gemfiles/ruby_2.4.10_rails5_postgres.gemfile +42 -0
  254. data/gemfiles/ruby_2.4.10_rails5_postgres.gemfile.lock +264 -0
  255. data/gemfiles/ruby_2.4.10_rails5_postgres_redis.gemfile +43 -0
  256. data/gemfiles/ruby_2.4.10_rails5_postgres_redis.gemfile.lock +266 -0
  257. data/gemfiles/ruby_2.4.10_rails5_postgres_redis_activesupport.gemfile +43 -0
  258. data/gemfiles/ruby_2.4.10_rails5_postgres_redis_activesupport.gemfile.lock +266 -0
  259. data/gemfiles/ruby_2.4.10_rails5_postgres_sidekiq.gemfile +44 -0
  260. data/gemfiles/ruby_2.4.10_rails5_postgres_sidekiq.gemfile.lock +275 -0
  261. data/gemfiles/ruby_2.4.10_rails5_semantic_logger.gemfile +42 -0
  262. data/gemfiles/ruby_2.4.10_rails5_semantic_logger.gemfile.lock +263 -0
  263. data/gemfiles/ruby_2.4.10_resque2_redis3.gemfile +40 -0
  264. data/gemfiles/ruby_2.4.10_resque2_redis3.gemfile.lock +180 -0
  265. data/gemfiles/ruby_2.4.10_resque2_redis4.gemfile +40 -0
  266. data/gemfiles/ruby_2.4.10_resque2_redis4.gemfile.lock +180 -0
  267. data/gemfiles/ruby_2.5.9_contrib.gemfile +86 -0
  268. data/gemfiles/ruby_2.5.9_contrib.gemfile.lock +1608 -0
  269. data/gemfiles/ruby_2.5.9_contrib_old.gemfile +40 -0
  270. data/gemfiles/ruby_2.5.9_contrib_old.gemfile.lock +167 -0
  271. data/gemfiles/ruby_2.5.9_core_old.gemfile +39 -0
  272. data/gemfiles/ruby_2.5.9_core_old.gemfile.lock +163 -0
  273. data/gemfiles/ruby_2.5.9_cucumber3.gemfile +40 -0
  274. data/gemfiles/ruby_2.5.9_cucumber3.gemfile.lock +184 -0
  275. data/gemfiles/ruby_2.5.9_cucumber4.gemfile +40 -0
  276. data/gemfiles/ruby_2.5.9_cucumber4.gemfile.lock +216 -0
  277. data/gemfiles/ruby_2.5.9_cucumber5.gemfile +40 -0
  278. data/gemfiles/ruby_2.5.9_cucumber5.gemfile.lock +216 -0
  279. data/gemfiles/ruby_2.5.9_rails5_mysql2.gemfile +45 -0
  280. data/gemfiles/ruby_2.5.9_rails5_mysql2.gemfile.lock +276 -0
  281. data/gemfiles/ruby_2.5.9_rails5_postgres.gemfile +45 -0
  282. data/gemfiles/ruby_2.5.9_rails5_postgres.gemfile.lock +276 -0
  283. data/gemfiles/ruby_2.5.9_rails5_postgres_redis.gemfile +46 -0
  284. data/gemfiles/ruby_2.5.9_rails5_postgres_redis.gemfile.lock +278 -0
  285. data/gemfiles/ruby_2.5.9_rails5_postgres_redis_activesupport.gemfile +46 -0
  286. data/gemfiles/ruby_2.5.9_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  287. data/gemfiles/ruby_2.5.9_rails5_postgres_sidekiq.gemfile +47 -0
  288. data/gemfiles/ruby_2.5.9_rails5_postgres_sidekiq.gemfile.lock +284 -0
  289. data/gemfiles/ruby_2.5.9_rails5_semantic_logger.gemfile +45 -0
  290. data/gemfiles/ruby_2.5.9_rails5_semantic_logger.gemfile.lock +275 -0
  291. data/gemfiles/ruby_2.5.9_rails61_mysql2.gemfile +45 -0
  292. data/gemfiles/ruby_2.5.9_rails61_mysql2.gemfile.lock +295 -0
  293. data/gemfiles/ruby_2.5.9_rails61_postgres.gemfile +45 -0
  294. data/gemfiles/ruby_2.5.9_rails61_postgres.gemfile.lock +295 -0
  295. data/gemfiles/ruby_2.5.9_rails61_postgres_redis.gemfile +46 -0
  296. data/gemfiles/ruby_2.5.9_rails61_postgres_redis.gemfile.lock +297 -0
  297. data/gemfiles/ruby_2.5.9_rails61_postgres_sidekiq.gemfile +46 -0
  298. data/gemfiles/ruby_2.5.9_rails61_postgres_sidekiq.gemfile.lock +302 -0
  299. data/gemfiles/ruby_2.5.9_rails61_semantic_logger.gemfile +45 -0
  300. data/gemfiles/ruby_2.5.9_rails61_semantic_logger.gemfile.lock +294 -0
  301. data/gemfiles/ruby_2.5.9_rails6_mysql2.gemfile +45 -0
  302. data/gemfiles/ruby_2.5.9_rails6_mysql2.gemfile.lock +292 -0
  303. data/gemfiles/ruby_2.5.9_rails6_postgres.gemfile +45 -0
  304. data/gemfiles/ruby_2.5.9_rails6_postgres.gemfile.lock +292 -0
  305. data/gemfiles/ruby_2.5.9_rails6_postgres_redis.gemfile +46 -0
  306. data/gemfiles/ruby_2.5.9_rails6_postgres_redis.gemfile.lock +294 -0
  307. data/gemfiles/ruby_2.5.9_rails6_postgres_redis_activesupport.gemfile +46 -0
  308. data/gemfiles/ruby_2.5.9_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  309. data/gemfiles/ruby_2.5.9_rails6_postgres_sidekiq.gemfile +47 -0
  310. data/gemfiles/ruby_2.5.9_rails6_postgres_sidekiq.gemfile.lock +300 -0
  311. data/gemfiles/ruby_2.5.9_rails6_semantic_logger.gemfile +45 -0
  312. data/gemfiles/ruby_2.5.9_rails6_semantic_logger.gemfile.lock +291 -0
  313. data/gemfiles/ruby_2.5.9_resque2_redis3.gemfile +41 -0
  314. data/gemfiles/ruby_2.5.9_resque2_redis3.gemfile.lock +190 -0
  315. data/gemfiles/ruby_2.5.9_resque2_redis4.gemfile +41 -0
  316. data/gemfiles/ruby_2.5.9_resque2_redis4.gemfile.lock +190 -0
  317. data/gemfiles/ruby_2.6.7_contrib.gemfile +82 -0
  318. data/gemfiles/ruby_2.6.7_contrib.gemfile.lock +1606 -0
  319. data/gemfiles/ruby_2.6.7_contrib_old.gemfile +40 -0
  320. data/gemfiles/ruby_2.6.7_contrib_old.gemfile.lock +169 -0
  321. data/gemfiles/ruby_2.6.7_core_old.gemfile +39 -0
  322. data/gemfiles/ruby_2.6.7_core_old.gemfile.lock +165 -0
  323. data/gemfiles/ruby_2.6.7_cucumber3.gemfile +40 -0
  324. data/gemfiles/ruby_2.6.7_cucumber3.gemfile.lock +186 -0
  325. data/gemfiles/ruby_2.6.7_cucumber4.gemfile +40 -0
  326. data/gemfiles/ruby_2.6.7_cucumber4.gemfile.lock +218 -0
  327. data/gemfiles/ruby_2.6.7_cucumber5.gemfile +40 -0
  328. data/gemfiles/ruby_2.6.7_cucumber5.gemfile.lock +218 -0
  329. data/gemfiles/ruby_2.6.7_rails5_mysql2.gemfile +43 -0
  330. data/gemfiles/ruby_2.6.7_rails5_mysql2.gemfile.lock +276 -0
  331. data/gemfiles/ruby_2.6.7_rails5_postgres.gemfile +43 -0
  332. data/gemfiles/ruby_2.6.7_rails5_postgres.gemfile.lock +276 -0
  333. data/gemfiles/ruby_2.6.7_rails5_postgres_redis.gemfile +44 -0
  334. data/gemfiles/ruby_2.6.7_rails5_postgres_redis.gemfile.lock +278 -0
  335. data/gemfiles/ruby_2.6.7_rails5_postgres_redis_activesupport.gemfile +44 -0
  336. data/gemfiles/ruby_2.6.7_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  337. data/gemfiles/ruby_2.6.7_rails5_postgres_sidekiq.gemfile +45 -0
  338. data/gemfiles/ruby_2.6.7_rails5_postgres_sidekiq.gemfile.lock +284 -0
  339. data/gemfiles/ruby_2.6.7_rails5_semantic_logger.gemfile +43 -0
  340. data/gemfiles/ruby_2.6.7_rails5_semantic_logger.gemfile.lock +275 -0
  341. data/gemfiles/ruby_2.6.7_rails61_mysql2.gemfile +43 -0
  342. data/gemfiles/ruby_2.6.7_rails61_mysql2.gemfile.lock +295 -0
  343. data/gemfiles/ruby_2.6.7_rails61_postgres.gemfile +43 -0
  344. data/gemfiles/ruby_2.6.7_rails61_postgres.gemfile.lock +295 -0
  345. data/gemfiles/ruby_2.6.7_rails61_postgres_redis.gemfile +44 -0
  346. data/gemfiles/ruby_2.6.7_rails61_postgres_redis.gemfile.lock +297 -0
  347. data/gemfiles/ruby_2.6.7_rails61_postgres_sidekiq.gemfile +44 -0
  348. data/gemfiles/ruby_2.6.7_rails61_postgres_sidekiq.gemfile.lock +302 -0
  349. data/gemfiles/ruby_2.6.7_rails61_semantic_logger.gemfile +43 -0
  350. data/gemfiles/ruby_2.6.7_rails61_semantic_logger.gemfile.lock +294 -0
  351. data/gemfiles/ruby_2.6.7_rails6_mysql2.gemfile +43 -0
  352. data/gemfiles/ruby_2.6.7_rails6_mysql2.gemfile.lock +292 -0
  353. data/gemfiles/ruby_2.6.7_rails6_postgres.gemfile +43 -0
  354. data/gemfiles/ruby_2.6.7_rails6_postgres.gemfile.lock +292 -0
  355. data/gemfiles/ruby_2.6.7_rails6_postgres_redis.gemfile +44 -0
  356. data/gemfiles/ruby_2.6.7_rails6_postgres_redis.gemfile.lock +294 -0
  357. data/gemfiles/ruby_2.6.7_rails6_postgres_redis_activesupport.gemfile +44 -0
  358. data/gemfiles/ruby_2.6.7_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  359. data/gemfiles/ruby_2.6.7_rails6_postgres_sidekiq.gemfile +45 -0
  360. data/gemfiles/ruby_2.6.7_rails6_postgres_sidekiq.gemfile.lock +300 -0
  361. data/gemfiles/ruby_2.6.7_rails6_semantic_logger.gemfile +43 -0
  362. data/gemfiles/ruby_2.6.7_rails6_semantic_logger.gemfile.lock +291 -0
  363. data/gemfiles/ruby_2.6.7_resque2_redis3.gemfile +41 -0
  364. data/gemfiles/ruby_2.6.7_resque2_redis3.gemfile.lock +192 -0
  365. data/gemfiles/ruby_2.6.7_resque2_redis4.gemfile +41 -0
  366. data/gemfiles/ruby_2.6.7_resque2_redis4.gemfile.lock +192 -0
  367. data/gemfiles/ruby_2.7.3_contrib.gemfile +81 -0
  368. data/gemfiles/ruby_2.7.3_contrib.gemfile.lock +1580 -0
  369. data/gemfiles/ruby_2.7.3_contrib_old.gemfile +40 -0
  370. data/gemfiles/ruby_2.7.3_contrib_old.gemfile.lock +169 -0
  371. data/gemfiles/ruby_2.7.3_core_old.gemfile +39 -0
  372. data/gemfiles/ruby_2.7.3_core_old.gemfile.lock +165 -0
  373. data/gemfiles/ruby_2.7.3_cucumber3.gemfile +40 -0
  374. data/gemfiles/ruby_2.7.3_cucumber3.gemfile.lock +186 -0
  375. data/gemfiles/ruby_2.7.3_cucumber4.gemfile +40 -0
  376. data/gemfiles/ruby_2.7.3_cucumber4.gemfile.lock +218 -0
  377. data/gemfiles/ruby_2.7.3_cucumber5.gemfile +40 -0
  378. data/gemfiles/ruby_2.7.3_cucumber5.gemfile.lock +218 -0
  379. data/gemfiles/ruby_2.7.3_rails5_mysql2.gemfile +43 -0
  380. data/gemfiles/ruby_2.7.3_rails5_mysql2.gemfile.lock +278 -0
  381. data/gemfiles/ruby_2.7.3_rails5_postgres.gemfile +43 -0
  382. data/gemfiles/ruby_2.7.3_rails5_postgres.gemfile.lock +278 -0
  383. data/gemfiles/ruby_2.7.3_rails5_postgres_redis.gemfile +45 -0
  384. data/gemfiles/ruby_2.7.3_rails5_postgres_redis.gemfile.lock +297 -0
  385. data/gemfiles/ruby_2.7.3_rails5_postgres_redis_activesupport.gemfile +45 -0
  386. data/gemfiles/ruby_2.7.3_rails5_postgres_redis_activesupport.gemfile.lock +297 -0
  387. data/gemfiles/ruby_2.7.3_rails5_postgres_sidekiq.gemfile +45 -0
  388. data/gemfiles/ruby_2.7.3_rails5_postgres_sidekiq.gemfile.lock +286 -0
  389. data/gemfiles/ruby_2.7.3_rails5_semantic_logger.gemfile +43 -0
  390. data/gemfiles/ruby_2.7.3_rails5_semantic_logger.gemfile.lock +277 -0
  391. data/gemfiles/ruby_2.7.3_rails61_mysql2.gemfile +43 -0
  392. data/gemfiles/ruby_2.7.3_rails61_mysql2.gemfile.lock +297 -0
  393. data/gemfiles/ruby_2.7.3_rails61_postgres.gemfile +43 -0
  394. data/gemfiles/ruby_2.7.3_rails61_postgres.gemfile.lock +297 -0
  395. data/gemfiles/ruby_2.7.3_rails61_postgres_redis.gemfile +44 -0
  396. data/gemfiles/ruby_2.7.3_rails61_postgres_redis.gemfile.lock +299 -0
  397. data/gemfiles/ruby_2.7.3_rails61_postgres_sidekiq.gemfile +44 -0
  398. data/gemfiles/ruby_2.7.3_rails61_postgres_sidekiq.gemfile.lock +304 -0
  399. data/gemfiles/ruby_2.7.3_rails61_semantic_logger.gemfile +43 -0
  400. data/gemfiles/ruby_2.7.3_rails61_semantic_logger.gemfile.lock +296 -0
  401. data/gemfiles/ruby_2.7.3_rails6_mysql2.gemfile +43 -0
  402. data/gemfiles/ruby_2.7.3_rails6_mysql2.gemfile.lock +294 -0
  403. data/gemfiles/ruby_2.7.3_rails6_postgres.gemfile +43 -0
  404. data/gemfiles/ruby_2.7.3_rails6_postgres.gemfile.lock +294 -0
  405. data/gemfiles/ruby_2.7.3_rails6_postgres_redis.gemfile +45 -0
  406. data/gemfiles/ruby_2.7.3_rails6_postgres_redis.gemfile.lock +313 -0
  407. data/gemfiles/ruby_2.7.3_rails6_postgres_redis_activesupport.gemfile +45 -0
  408. data/gemfiles/ruby_2.7.3_rails6_postgres_redis_activesupport.gemfile.lock +313 -0
  409. data/gemfiles/ruby_2.7.3_rails6_postgres_sidekiq.gemfile +45 -0
  410. data/gemfiles/ruby_2.7.3_rails6_postgres_sidekiq.gemfile.lock +302 -0
  411. data/gemfiles/ruby_2.7.3_rails6_semantic_logger.gemfile +43 -0
  412. data/gemfiles/ruby_2.7.3_rails6_semantic_logger.gemfile.lock +293 -0
  413. data/gemfiles/ruby_2.7.3_resque2_redis3.gemfile +41 -0
  414. data/gemfiles/ruby_2.7.3_resque2_redis3.gemfile.lock +192 -0
  415. data/gemfiles/ruby_2.7.3_resque2_redis4.gemfile +41 -0
  416. data/gemfiles/ruby_2.7.3_resque2_redis4.gemfile.lock +192 -0
  417. data/gemfiles/ruby_3.0.1_contrib.gemfile +80 -0
  418. data/gemfiles/ruby_3.0.1_contrib.gemfile.lock +1583 -0
  419. data/gemfiles/ruby_3.0.1_core_old.gemfile +40 -0
  420. data/gemfiles/ruby_3.0.1_core_old.gemfile.lock +167 -0
  421. data/gemfiles/ruby_3.0.1_cucumber3.gemfile +41 -0
  422. data/gemfiles/ruby_3.0.1_cucumber3.gemfile.lock +188 -0
  423. data/gemfiles/ruby_3.0.1_cucumber4.gemfile +41 -0
  424. data/gemfiles/ruby_3.0.1_cucumber4.gemfile.lock +220 -0
  425. data/gemfiles/ruby_3.0.1_cucumber5.gemfile +41 -0
  426. data/gemfiles/ruby_3.0.1_cucumber5.gemfile.lock +220 -0
  427. data/gemfiles/ruby_3.0.1_rails61_mysql2.gemfile +44 -0
  428. data/gemfiles/ruby_3.0.1_rails61_mysql2.gemfile.lock +297 -0
  429. data/gemfiles/ruby_3.0.1_rails61_postgres.gemfile +44 -0
  430. data/gemfiles/ruby_3.0.1_rails61_postgres.gemfile.lock +297 -0
  431. data/gemfiles/ruby_3.0.1_rails61_postgres_redis.gemfile +45 -0
  432. data/gemfiles/ruby_3.0.1_rails61_postgres_redis.gemfile.lock +299 -0
  433. data/gemfiles/ruby_3.0.1_rails61_postgres_sidekiq.gemfile +46 -0
  434. data/gemfiles/ruby_3.0.1_rails61_postgres_sidekiq.gemfile.lock +311 -0
  435. data/gemfiles/ruby_3.0.1_rails61_semantic_logger.gemfile +44 -0
  436. data/gemfiles/ruby_3.0.1_rails61_semantic_logger.gemfile.lock +296 -0
  437. data/gemfiles/ruby_3.0.1_resque2_redis3.gemfile +42 -0
  438. data/gemfiles/ruby_3.0.1_resque2_redis3.gemfile.lock +194 -0
  439. data/gemfiles/ruby_3.0.1_resque2_redis4.gemfile +42 -0
  440. data/gemfiles/ruby_3.0.1_resque2_redis4.gemfile.lock +194 -0
  441. data/integration/apps/rack/README.md +2 -2
  442. data/integration/apps/rack/script/ci +2 -1
  443. data/integration/apps/rails-five/README.md +2 -2
  444. data/integration/apps/rails-five/script/ci +2 -1
  445. data/integration/apps/rspec/.dockerignore +1 -0
  446. data/integration/apps/rspec/.envrc.sample +1 -0
  447. data/integration/apps/rspec/.gitignore +2 -0
  448. data/integration/apps/rspec/.rspec +1 -0
  449. data/integration/apps/rspec/Dockerfile +25 -0
  450. data/integration/apps/rspec/Dockerfile-ci +11 -0
  451. data/integration/apps/rspec/Gemfile +14 -0
  452. data/integration/apps/rspec/README.md +70 -0
  453. data/integration/apps/rspec/agent.yaml +3 -0
  454. data/integration/apps/rspec/app/datadog.rb +13 -0
  455. data/integration/apps/rspec/app/fibonacci.rb +30 -0
  456. data/integration/apps/rspec/bin/run +20 -0
  457. data/integration/apps/rspec/bin/setup +23 -0
  458. data/integration/apps/rspec/bin/test +21 -0
  459. data/integration/apps/rspec/docker-compose.ci.yml +51 -0
  460. data/integration/apps/rspec/docker-compose.yml +64 -0
  461. data/integration/apps/rspec/script/build-images +37 -0
  462. data/integration/apps/rspec/script/ci +53 -0
  463. data/integration/apps/rspec/spec/fibonacci_spec.rb +16 -0
  464. data/integration/apps/rspec/spec/rspec_spec.rb +58 -0
  465. data/integration/apps/rspec/spec/spec_helper.rb +24 -0
  466. data/integration/apps/ruby/README.md +2 -2
  467. data/integration/apps/ruby/script/ci +2 -1
  468. data/integration/images/include/datadog/demo_env.rb +15 -14
  469. data/lib/datadog/ci.rb +16 -0
  470. data/lib/datadog/ci/configuration/components.rb +30 -0
  471. data/lib/datadog/ci/configuration/settings.rb +36 -0
  472. data/lib/datadog/ci/context_flush.rb +28 -0
  473. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +30 -0
  474. data/lib/datadog/ci/contrib/cucumber/ext.rb +19 -0
  475. data/lib/datadog/ci/contrib/cucumber/formatter.rb +97 -0
  476. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +26 -0
  477. data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
  478. data/lib/datadog/ci/contrib/cucumber/patcher.rb +25 -0
  479. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +30 -0
  480. data/lib/datadog/ci/contrib/rspec/example.rb +73 -0
  481. data/lib/datadog/ci/contrib/rspec/ext.rb +18 -0
  482. data/lib/datadog/ci/contrib/rspec/integration.rb +48 -0
  483. data/lib/datadog/ci/contrib/rspec/patcher.rb +25 -0
  484. data/lib/datadog/ci/ext/app_types.rb +9 -0
  485. data/lib/datadog/ci/ext/environment.rb +438 -0
  486. data/lib/datadog/ci/ext/settings.rb +10 -0
  487. data/lib/datadog/ci/ext/test.rb +34 -0
  488. data/lib/datadog/ci/extensions.rb +17 -0
  489. data/lib/datadog/ci/test.rb +76 -0
  490. data/lib/datadog/core/environment/cgroup.rb +49 -0
  491. data/lib/datadog/core/environment/class_count.rb +19 -0
  492. data/lib/datadog/core/environment/container.rb +88 -0
  493. data/lib/datadog/core/environment/ext.rb +26 -0
  494. data/lib/datadog/core/environment/gc.rb +18 -0
  495. data/lib/datadog/core/environment/identity.rb +50 -0
  496. data/lib/datadog/core/environment/object_space.rb +22 -0
  497. data/lib/datadog/core/environment/socket.rb +16 -0
  498. data/lib/datadog/core/environment/thread_count.rb +18 -0
  499. data/lib/datadog/core/environment/variable_helpers.rb +39 -0
  500. data/lib/ddtrace.rb +2 -2
  501. data/lib/ddtrace/auto_instrument.rb +1 -0
  502. data/lib/ddtrace/buffer.rb +2 -2
  503. data/lib/ddtrace/configuration.rb +1 -23
  504. data/lib/ddtrace/configuration/agent_settings_resolver.rb +230 -0
  505. data/lib/ddtrace/configuration/base.rb +7 -10
  506. data/lib/ddtrace/configuration/components.rb +88 -43
  507. data/lib/ddtrace/configuration/options.rb +2 -2
  508. data/lib/ddtrace/configuration/settings.rb +76 -10
  509. data/lib/ddtrace/context.rb +17 -14
  510. data/lib/ddtrace/context_flush.rb +14 -2
  511. data/lib/ddtrace/contrib/action_cable/event.rb +4 -4
  512. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -1
  513. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +1 -1
  514. data/lib/ddtrace/contrib/action_pack/utils.rb +1 -1
  515. data/lib/ddtrace/contrib/action_view/event.rb +2 -2
  516. data/lib/ddtrace/contrib/action_view/patcher.rb +4 -4
  517. data/lib/ddtrace/contrib/active_model_serializers/event.rb +2 -2
  518. data/lib/ddtrace/contrib/active_record/event.rb +2 -2
  519. data/lib/ddtrace/contrib/active_record/utils.rb +2 -2
  520. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +7 -7
  521. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -5
  522. data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -2
  523. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -1
  524. data/lib/ddtrace/contrib/auto_instrument.rb +1 -2
  525. data/lib/ddtrace/contrib/aws/instrumentation.rb +29 -0
  526. data/lib/ddtrace/contrib/aws/patcher.rb +4 -0
  527. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -1
  528. data/lib/ddtrace/contrib/configurable.rb +1 -1
  529. data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -1
  530. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -1
  531. data/lib/ddtrace/contrib/ethon/easy_patch.rb +1 -1
  532. data/lib/ddtrace/contrib/ethon/multi_patch.rb +1 -1
  533. data/lib/ddtrace/contrib/ethon/patcher.rb +2 -2
  534. data/lib/ddtrace/contrib/extensions.rb +3 -3
  535. data/lib/ddtrace/contrib/faraday/patcher.rb +2 -2
  536. data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -2
  537. data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
  538. data/lib/ddtrace/contrib/grpc/patcher.rb +1 -1
  539. data/lib/ddtrace/contrib/http/instrumentation.rb +1 -1
  540. data/lib/ddtrace/contrib/http/patcher.rb +1 -1
  541. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +1 -1
  542. data/lib/ddtrace/contrib/httpclient/patcher.rb +1 -1
  543. data/lib/ddtrace/contrib/httprb/instrumentation.rb +1 -1
  544. data/lib/ddtrace/contrib/httprb/patcher.rb +1 -1
  545. data/lib/ddtrace/contrib/integration.rb +3 -3
  546. data/lib/ddtrace/contrib/kafka/event.rb +2 -2
  547. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +18 -0
  548. data/lib/ddtrace/contrib/lograge/ext.rb +10 -0
  549. data/lib/ddtrace/contrib/lograge/instrumentation.rb +38 -0
  550. data/lib/ddtrace/contrib/lograge/integration.rb +45 -0
  551. data/lib/ddtrace/contrib/{rspec → lograge}/patcher.rb +6 -4
  552. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -2
  553. data/lib/ddtrace/contrib/mongodb/patcher.rb +2 -2
  554. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
  555. data/lib/ddtrace/contrib/mysql2/patcher.rb +1 -1
  556. data/lib/ddtrace/contrib/patchable.rb +2 -2
  557. data/lib/ddtrace/contrib/patcher.rb +2 -2
  558. data/lib/ddtrace/contrib/presto/instrumentation.rb +1 -1
  559. data/lib/ddtrace/contrib/presto/patcher.rb +1 -1
  560. data/lib/ddtrace/contrib/qless/patcher.rb +3 -5
  561. data/lib/ddtrace/contrib/racecar/event.rb +2 -2
  562. data/lib/ddtrace/contrib/rack/middlewares.rb +1 -1
  563. data/lib/ddtrace/contrib/rails/framework.rb +25 -1
  564. data/lib/ddtrace/contrib/rails/log_injection.rb +0 -40
  565. data/lib/ddtrace/contrib/rails/patcher.rb +11 -9
  566. data/lib/ddtrace/contrib/rake/instrumentation.rb +1 -1
  567. data/lib/ddtrace/contrib/rake/patcher.rb +1 -1
  568. data/lib/ddtrace/contrib/registerable.rb +2 -2
  569. data/lib/ddtrace/contrib/resque/patcher.rb +1 -1
  570. data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
  571. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -1
  572. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +18 -0
  573. data/lib/ddtrace/contrib/semantic_logger/ext.rb +10 -0
  574. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +42 -0
  575. data/lib/ddtrace/contrib/semantic_logger/integration.rb +47 -0
  576. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +25 -0
  577. data/lib/ddtrace/contrib/sequel/database.rb +1 -1
  578. data/lib/ddtrace/contrib/sequel/dataset.rb +1 -1
  579. data/lib/ddtrace/contrib/sequel/patcher.rb +2 -2
  580. data/lib/ddtrace/contrib/sinatra/patcher.rb +1 -1
  581. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +4 -6
  582. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +4 -0
  583. data/lib/ddtrace/correlation.rb +1 -1
  584. data/lib/ddtrace/diagnostics/environment_logger.rb +4 -4
  585. data/lib/ddtrace/error.rb +76 -9
  586. data/lib/ddtrace/ext/app_types.rb +0 -1
  587. data/lib/ddtrace/ext/environment.rb +7 -0
  588. data/lib/ddtrace/ext/git.rb +9 -1
  589. data/lib/ddtrace/ext/profiling.rb +1 -0
  590. data/lib/ddtrace/ext/runtime.rb +0 -9
  591. data/lib/ddtrace/ext/test.rb +2 -18
  592. data/lib/ddtrace/ext/transport.rb +1 -0
  593. data/lib/ddtrace/metrics.rb +64 -13
  594. data/lib/ddtrace/opentelemetry/extensions.rb +1 -1
  595. data/lib/ddtrace/opentracer.rb +20 -39
  596. data/lib/ddtrace/patcher.rb +2 -2
  597. data/lib/ddtrace/profiling.rb +75 -22
  598. data/lib/ddtrace/profiling/collectors/stack.rb +17 -8
  599. data/lib/ddtrace/profiling/encoding/profile.rb +6 -0
  600. data/lib/ddtrace/profiling/ext/cpu.rb +18 -5
  601. data/lib/ddtrace/profiling/ext/cthread.rb +56 -35
  602. data/lib/ddtrace/profiling/ext/forking.rb +7 -7
  603. data/lib/ddtrace/profiling/flush.rb +12 -10
  604. data/lib/ddtrace/profiling/pprof/builder.rb +26 -28
  605. data/lib/ddtrace/profiling/pprof/converter.rb +4 -0
  606. data/lib/ddtrace/profiling/pprof/stack_sample.rb +17 -1
  607. data/lib/ddtrace/profiling/pprof/template.rb +4 -0
  608. data/lib/ddtrace/profiling/profiler.rb +2 -0
  609. data/lib/ddtrace/profiling/recorder.rb +8 -0
  610. data/lib/ddtrace/profiling/scheduler.rb +44 -12
  611. data/lib/ddtrace/profiling/tasks/setup.rb +13 -13
  612. data/lib/ddtrace/profiling/transport/http.rb +58 -62
  613. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +12 -2
  614. data/lib/ddtrace/runtime/metrics.rb +20 -14
  615. data/lib/ddtrace/span.rb +17 -6
  616. data/lib/ddtrace/sync_writer.rb +4 -3
  617. data/lib/ddtrace/tracer.rb +19 -44
  618. data/lib/ddtrace/transport/http.rb +43 -40
  619. data/lib/ddtrace/transport/http/statistics.rb +2 -2
  620. data/lib/ddtrace/transport/http/traces.rb +3 -3
  621. data/lib/ddtrace/transport/io/traces.rb +1 -1
  622. data/lib/ddtrace/utils/forking.rb +1 -1
  623. data/lib/ddtrace/utils/object_set.rb +3 -5
  624. data/lib/ddtrace/utils/time.rb +1 -3
  625. data/lib/ddtrace/version.rb +15 -5
  626. data/lib/ddtrace/workers.rb +1 -1
  627. data/lib/ddtrace/workers/async.rb +3 -2
  628. data/lib/ddtrace/workers/loop.rb +14 -2
  629. data/lib/ddtrace/workers/polling.rb +11 -5
  630. data/lib/ddtrace/workers/queue.rb +1 -1
  631. data/lib/ddtrace/workers/trace_writer.rb +3 -6
  632. data/lib/ddtrace/writer.rb +6 -3
  633. data/tasks/update_appraisal_gemfiles.rake +36 -0
  634. metadata +493 -33
  635. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -83
  636. data/integration/images/ruby/2.0/Dockerfile +0 -54
  637. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -28
  638. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -17
  639. data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -98
  640. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
  641. data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
  642. data/lib/ddtrace/contrib/cucumber/patcher.rb +0 -23
  643. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -28
  644. data/lib/ddtrace/contrib/rspec/example.rb +0 -75
  645. data/lib/ddtrace/contrib/rspec/ext.rb +0 -16
  646. data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
  647. data/lib/ddtrace/environment.rb +0 -41
  648. data/lib/ddtrace/ext/ci.rb +0 -297
  649. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  650. data/lib/ddtrace/runtime/class_count.rb +0 -17
  651. data/lib/ddtrace/runtime/container.rb +0 -79
  652. data/lib/ddtrace/runtime/gc.rb +0 -16
  653. data/lib/ddtrace/runtime/identity.rb +0 -48
  654. data/lib/ddtrace/runtime/object_space.rb +0 -19
  655. data/lib/ddtrace/runtime/socket.rb +0 -14
  656. data/lib/ddtrace/runtime/thread_count.rb +0 -16
@@ -0,0 +1,69 @@
1
+ require 'benchmark/ips'
2
+ require 'ddtrace'
3
+ require 'pry'
4
+
5
+ # This benchmark measures the performance of the main stack sampling loop of the profiler
6
+
7
+ class ProfilerSampleLoopBenchmark
8
+ def create_profiler
9
+ Datadog.configure do |c|
10
+ # c.diagnostics.debug = true
11
+ c.profiling.enabled = true
12
+ c.tracer.transport_options = proc { |t| t.adapter :test }
13
+ end
14
+
15
+ # Stop background threads
16
+ Datadog.profiler.shutdown!
17
+
18
+ # Call collection directly
19
+ @stack_collector = Datadog.profiler.collectors.first
20
+ @recorder = @stack_collector.recorder
21
+ end
22
+
23
+ def thread_with_very_deep_stack(depth: 500)
24
+ deep_stack = proc do |n|
25
+ if n > 0
26
+ deep_stack.call(n - 1)
27
+ else
28
+ sleep
29
+ end
30
+ end
31
+
32
+ Thread.new { deep_stack.call(depth) }.tap { |t| t.name = "Deep stack #{depth}" }
33
+ end
34
+
35
+ def run_benchmark
36
+ Benchmark.ips do |x|
37
+ x.config(time: 10, warmup: 2)
38
+
39
+ x.report("stack collector #{ENV['CONFIG']}") do
40
+ @stack_collector.collect_and_wait
41
+ end
42
+
43
+ x.save! 'profiler-sample-loop-results'
44
+ x.compare!
45
+ end
46
+
47
+ @recorder.flush
48
+ end
49
+
50
+ def run_forever
51
+ while true
52
+ 1000.times { @stack_collector.collect_and_wait }
53
+ @recorder.flush
54
+ print '.'
55
+ end
56
+ end
57
+ end
58
+
59
+ puts "Current pid is #{Process.pid}"
60
+
61
+ ProfilerSampleLoopBenchmark.new.instance_exec do
62
+ create_profiler
63
+ 4.times { thread_with_very_deep_stack }
64
+ if ARGV.include?('--forever')
65
+ run_forever
66
+ else
67
+ run_benchmark
68
+ end
69
+ end
@@ -0,0 +1,93 @@
1
+ require 'benchmark/ips'
2
+ require 'ddtrace'
3
+ require 'pry'
4
+
5
+ # This benchmark measures the performance of encoding pprofs and trying to submit them
6
+ #
7
+ # The FLUSH_DUMP_FILE (by default benchmarks/data/profiler-submission-marshal.gz, gathered from benchmarking using
8
+ # the discourse forum rails app) can be generated by changing the scheduler.rb#flush_events to dump the contents of
9
+ # "flush" to a file during a benchmark execution:
10
+ #
11
+ # dump_file = "marshal-#{Time.now.utc.to_i}.dump"
12
+ # File.open(dump_file, "w") { |f| Marshal.dump(flush, f) }
13
+ # Datadog.logger.info("Dumped to #{dump_file}")
14
+ #
15
+ # And then gzipping the result. (This can probably be automated a bit by adding an extra exporter, but the above worked
16
+ # for me).
17
+
18
+ class ProfilerSubmission
19
+ def create_profiler
20
+ @adapter_buffer = []
21
+
22
+ Datadog.configure do |c|
23
+ # c.diagnostics.debug = true
24
+ c.profiling.enabled = true
25
+ c.tracer.transport_options = proc { |t| t.adapter :test, @adapter_buffer }
26
+ end
27
+
28
+ # Stop background threads
29
+ Datadog.profiler.shutdown!
30
+
31
+ # Call exporter directly
32
+ @exporter = Datadog.profiler.scheduler.exporters.first
33
+ @flush = Marshal.load(
34
+ Zlib::GzipReader.new(File.open(ENV['FLUSH_DUMP_FILE'] || 'benchmarks/data/profiler-submission-marshal.gz'))
35
+ )
36
+ end
37
+
38
+ def check_valid_pprof
39
+ output_pprof = @adapter_buffer.last[:form]["data[0]"].io
40
+
41
+ expected_hashes = [
42
+ "75c65dec2d5d750faca3e905486c39ba44219636ac1bea15d5d624b741d4b62a",
43
+ "6780c47b3e271f2abe0346fd40ac358f6a34270b3a8f5743aacd1970bbbbc6f5"
44
+ ]
45
+ current_hash = Digest::SHA256.hexdigest(Zlib::GzipReader.new(output_pprof).read)
46
+
47
+ if expected_hashes.include?(current_hash)
48
+ puts "Output hash #{current_hash} matches known signature"
49
+ else
50
+ puts "WARNING: Unexpected pprof output -- unknown hash. Hashes seem to differ due to some of our dependencies changing, " \
51
+ "but it can also indicate that encoding output has become corrupted."
52
+ end
53
+ end
54
+
55
+ def run_benchmark
56
+ Benchmark.ips do |x|
57
+ x.config(time: 10, warmup: 2)
58
+
59
+ x.report("exporter #{ENV['CONFIG']}") do
60
+ run_once
61
+ end
62
+
63
+ x.save! 'profiler-submission-results.json'
64
+ x.compare!
65
+ end
66
+ end
67
+
68
+ def run_forever
69
+ while true
70
+ run_once
71
+ print '.'
72
+ end
73
+ end
74
+
75
+ def run_once
76
+ @adapter_buffer.clear
77
+ @exporter.export(@flush)
78
+ end
79
+ end
80
+
81
+ puts "Current pid is #{Process.pid}"
82
+
83
+ ProfilerSubmission.new.instance_exec do
84
+ create_profiler
85
+ run_once
86
+ check_valid_pprof
87
+
88
+ if ARGV.include?('--forever')
89
+ run_forever
90
+ else
91
+ run_benchmark
92
+ end
93
+ end
data/ddtrace.gemspec CHANGED
@@ -7,7 +7,7 @@ require 'ddtrace/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'ddtrace'
9
9
  spec.version = Datadog::VERSION::STRING
10
- spec.required_ruby_version = ">= #{Datadog::VERSION::MINIMUM_RUBY_VERSION}"
10
+ spec.required_ruby_version = [">= #{Datadog::VERSION::MINIMUM_RUBY_VERSION}", "< #{Datadog::VERSION::MAXIMUM_RUBY_VERSION}"]
11
11
  spec.required_rubygems_version = '>= 2.0.0'
12
12
  spec.authors = ['Datadog, Inc.']
13
13
  spec.email = ['dev@datadoghq.com']
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
35
35
  if RUBY_VERSION >= '2.2.0'
36
36
  spec.add_dependency 'msgpack'
37
37
  else
38
- # msgpack 1.4 fails for Ruby 2.0 and 2.1: https://github.com/msgpack/msgpack-ruby/issues/205
38
+ # msgpack 1.4 fails for Ruby 2.1: https://github.com/msgpack/msgpack-ruby/issues/205
39
39
  spec.add_dependency 'msgpack', '< 1.4'
40
40
  end
41
41
 
data/docker-compose.yml CHANGED
@@ -1,38 +1,8 @@
1
1
  version: '3.2'
2
2
  services:
3
3
  # MRI
4
- tracer-2.0:
5
- image: palazzem/docker-library:ddtrace_rb_2_0_0
6
- command: /bin/bash
7
- depends_on:
8
- - ddagent
9
- - elasticsearch
10
- - memcached
11
- - mongodb
12
- - mysql
13
- - postgres
14
- - presto
15
- - redis
16
- env_file: ./.env
17
- environment:
18
- - BUNDLE_GEMFILE=/app/Gemfile
19
- - DD_AGENT_HOST=ddagent
20
- - TEST_DATADOG_INTEGRATION=1
21
- - TEST_ELASTICSEARCH_HOST=elasticsearch
22
- - TEST_MEMCACHED_HOST=memcached
23
- - TEST_MONGODB_HOST=mongodb
24
- - TEST_MYSQL_HOST=mysql
25
- - TEST_POSTGRES_HOST=postgres
26
- - TEST_PRESTO_HOST=presto
27
- - TEST_REDIS_HOST=redis
28
- stdin_open: true
29
- tty: true
30
- volumes:
31
- - .:/app
32
- - bundle-2.0:/usr/local/bundle
33
- - gemfiles-2.0:/app/gemfiles
34
4
  tracer-2.1:
35
- image: palazzem/docker-library:ddtrace_rb_2_1_10
5
+ image: ivoanjo/docker-library:ddtrace_rb_2_1_10
36
6
  command: /bin/bash
37
7
  depends_on:
38
8
  - ddagent
@@ -61,9 +31,8 @@ services:
61
31
  volumes:
62
32
  - .:/app
63
33
  - bundle-2.1:/usr/local/bundle
64
- - gemfiles-2.1:/app/gemfiles
65
34
  tracer-2.2:
66
- image: palazzem/docker-library:ddtrace_rb_2_2_10
35
+ image: ivoanjo/docker-library:ddtrace_rb_2_2_10
67
36
  command: /bin/bash
68
37
  depends_on:
69
38
  - ddagent
@@ -92,9 +61,8 @@ services:
92
61
  volumes:
93
62
  - .:/app
94
63
  - bundle-2.2:/usr/local/bundle
95
- - gemfiles-2.2:/app/gemfiles
96
64
  tracer-2.3:
97
- image: palazzem/docker-library:ddtrace_rb_2_3_8
65
+ image: ivoanjo/docker-library:ddtrace_rb_2_3_8
98
66
  command: /bin/bash
99
67
  depends_on:
100
68
  - ddagent
@@ -123,9 +91,8 @@ services:
123
91
  volumes:
124
92
  - .:/app
125
93
  - bundle-2.3:/usr/local/bundle
126
- - gemfiles-2.3:/app/gemfiles
127
94
  tracer-2.4:
128
- image: palazzem/docker-library:ddtrace_rb_2_4_6
95
+ image: ivoanjo/docker-library:ddtrace_rb_2_4_10
129
96
  command: /bin/bash
130
97
  depends_on:
131
98
  - ddagent
@@ -154,9 +121,8 @@ services:
154
121
  volumes:
155
122
  - .:/app
156
123
  - bundle-2.4:/usr/local/bundle
157
- - gemfiles-2.4:/app/gemfiles
158
124
  tracer-2.5:
159
- image: marcotc/docker-library:ddtrace_rb_2_5_6
125
+ image: ivoanjo/docker-library:ddtrace_rb_2_5_9
160
126
  command: /bin/bash
161
127
  depends_on:
162
128
  - ddagent
@@ -185,9 +151,8 @@ services:
185
151
  volumes:
186
152
  - .:/app
187
153
  - bundle-2.5:/usr/local/bundle
188
- - gemfiles-2.5:/app/gemfiles
189
154
  tracer-2.6:
190
- image: marcotc/docker-library:ddtrace_rb_2_6_4
155
+ image: ivoanjo/docker-library:ddtrace_rb_2_6_7
191
156
  command: /bin/bash
192
157
  depends_on:
193
158
  - ddagent
@@ -216,9 +181,8 @@ services:
216
181
  volumes:
217
182
  - .:/app
218
183
  - bundle-2.6:/usr/local/bundle
219
- - gemfiles-2.6:/app/gemfiles
220
184
  tracer-2.7:
221
- image: marcotc/docker-library:ddtrace_rb_2_7_0
185
+ image: ivoanjo/docker-library:ddtrace_rb_2_7_3
222
186
  command: /bin/bash
223
187
  depends_on:
224
188
  - ddagent
@@ -247,9 +211,8 @@ services:
247
211
  volumes:
248
212
  - .:/app
249
213
  - bundle-2.7:/usr/local/bundle
250
- - gemfiles-2.7:/app/gemfiles
251
214
  tracer-3.0:
252
- image: marcotc/docker-library:ddtrace_rb_3.0.0
215
+ image: ivoanjo/docker-library:ddtrace_rb_3_0_1
253
216
  command: /bin/bash
254
217
  depends_on:
255
218
  - ddagent
@@ -275,10 +238,9 @@ services:
275
238
  volumes:
276
239
  - .:/app
277
240
  - bundle-3.0:/usr/local/bundle
278
- - gemfiles-3.0:/app/gemfiles
279
241
  # JRuby
280
242
  tracer-jruby-9.2.0.0:
281
- image: marcotc/docker-library:ddtrace_rb_jruby_9_2_0_0
243
+ image: ivoanjo/docker-library:ddtrace_rb_jruby_9_2_0_0
282
244
  command: /bin/bash
283
245
  depends_on:
284
246
  - ddagent
@@ -307,9 +269,8 @@ services:
307
269
  volumes:
308
270
  - .:/app
309
271
  - bundle-jruby-9.2.0.0:/usr/local/bundle
310
- - gemfiles-jruby-9.2.0.0:/app/gemfiles
311
272
  tracer-jruby-9.2-latest:
312
- image: marcotc/docker-library:ddtrace_rb_jruby_9_2_11_1
273
+ image: ivoanjo/docker-library:ddtrace_rb_jruby_9_2_18_0
313
274
  command: /bin/bash
314
275
  depends_on:
315
276
  - ddagent
@@ -338,10 +299,9 @@ services:
338
299
  volumes:
339
300
  - .:/app
340
301
  - bundle-jruby-9.2-latest:/usr/local/bundle
341
- - gemfiles-jruby-9.2-latest:/app/gemfiles
342
302
  # TruffleRuby
343
- tracer-truffleruby-21.0.0:
344
- image: ivoanjo/docker-library:ddtrace_rb_truffleruby_21_0_0
303
+ tracer-truffleruby-21.1.0:
304
+ image: ivoanjo/docker-library:ddtrace_rb_truffleruby_21_1_0
345
305
  command: /bin/bash
346
306
  depends_on:
347
307
  - ddagent
@@ -369,8 +329,7 @@ services:
369
329
  tty: true
370
330
  volumes:
371
331
  - .:/app
372
- - bundle-truffleruby-21.0.0:/usr/local/bundle
373
- - gemfiles-truffleruby-21.0.0:/app/gemfiles
332
+ - bundle-truffleruby-21.1.0:/usr/local/bundle
374
333
  ddagent:
375
334
  image: datadog/agent
376
335
  environment:
@@ -442,7 +401,6 @@ services:
442
401
  ports:
443
402
  - "${TEST_REDIS_PORT}:6379"
444
403
  volumes:
445
- bundle-2.0:
446
404
  bundle-2.1:
447
405
  bundle-2.2:
448
406
  bundle-2.3:
@@ -453,16 +411,4 @@ volumes:
453
411
  bundle-3.0:
454
412
  bundle-jruby-9.2.0.0:
455
413
  bundle-jruby-9.2-latest:
456
- bundle-truffleruby-21.0.0:
457
- gemfiles-2.0:
458
- gemfiles-2.1:
459
- gemfiles-2.2:
460
- gemfiles-2.3:
461
- gemfiles-2.4:
462
- gemfiles-2.5:
463
- gemfiles-2.6:
464
- gemfiles-2.7:
465
- gemfiles-3.0:
466
- gemfiles-jruby-9.2.0.0:
467
- gemfiles-jruby-9.2-latest:
468
- gemfiles-truffleruby-21.0.0:
414
+ bundle-truffleruby-21.1.0:
@@ -85,6 +85,10 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
85
85
  - [Metrics](#metrics)
86
86
  - [For application runtime](#for-application-runtime)
87
87
  - [OpenTracing](#opentracing)
88
+ - [Profiling](#profiling)
89
+ - [Known issues and suggested configurations](#known-issues-and-suggested-configurations)
90
+ - [Payload too large](#payload-too-large)
91
+ - [Stack level too deep](#stack-level-too-deep)
88
92
 
89
93
  ## Compatibility
90
94
 
@@ -100,7 +104,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d
100
104
  | | | 2.3 | Full | Latest |
101
105
  | | | 2.2 | Full | Latest |
102
106
  | | | 2.1 | Full | Latest |
103
- | | | 2.0 | Deprecated | < 0.50.0 |
107
+ | | | 2.0 | EOL since June 7th, 2021 | < 0.50.0 |
104
108
  | | | 1.9.3 | EOL since August 6th, 2020 | < 0.27.0 |
105
109
  | | | 1.9.1 | EOL since August 6th, 2020 | < 0.27.0 |
106
110
  | JRuby | https://www.jruby.org | 9.2 | Full | Latest |
@@ -546,7 +550,7 @@ Datadog.configure do |c|
546
550
  # Symbol matching your database connection in config/database.yml
547
551
  # Only available if you are using Rails with ActiveRecord.
548
552
  c.use :active_record, describes: :secondary_database, service_name: 'secondary-db'
549
-
553
+
550
554
  # Block configuration pattern.
551
555
  c.use :active_record, describes: :secondary_database do |second_db|
552
556
  second_db.service_name = 'secondary-db'
@@ -584,7 +588,7 @@ Datadog.configure do |c|
584
588
 
585
589
  # Matches any `mysql2` connection.
586
590
  c.use :active_record, describes: { adapter: 'mysql2'}, service_name: 'mysql-db'
587
-
591
+
588
592
  # Matches any `mysql2` connection to the `reports` database.
589
593
  #
590
594
  # In case of multiple matching `describe` configurations, the latest one applies.
@@ -1565,7 +1569,7 @@ Datadog.configure do |c|
1565
1569
  # For network connections, only these fields are considered during matching:
1566
1570
  # scheme, host, port, db
1567
1571
  # Other fields are ignored.
1568
-
1572
+
1569
1573
  # Network connection string
1570
1574
  c.use :redis, describes: 'redis://127.0.0.1:6379/0', service_name: 'redis-connection-string'
1571
1575
  c.use :redis, describes: { url: 'redis://127.0.0.1:6379/1' }, service_name: 'redis-connection-url'
@@ -1678,8 +1682,6 @@ Where `options` is an optional `Hash` that accepts the following parameters:
1678
1682
  | --- | ----------- | ------- |
1679
1683
  | `service_name` | Service name for `sequel` instrumentation | Name of database adapter (e.g. `'mysql2'`) |
1680
1684
 
1681
- Only Ruby 2.0+ is supported.
1682
-
1683
1685
  **Configuring databases to use different settings**
1684
1686
 
1685
1687
  If you use multiple databases with Sequel, you can give each of them different settings by configuring their respective `Sequel::Database` objects:
@@ -1867,7 +1869,7 @@ Datadog.configure do |c|
1867
1869
 
1868
1870
  # Breaks down very large traces into smaller batches
1869
1871
  c.tracer.partial_flush.enabled = false
1870
-
1872
+
1871
1873
  # You can specify your own tracer
1872
1874
  c.tracer.instance = Datadog::Tracer.new
1873
1875
 
@@ -1954,7 +1956,7 @@ We recommend setting the environment variable `DD_TRACE_SAMPLE_RATE=1.0` in all
1954
1956
  App Analytics, previously configured with the `analytics_enabled` setting, is deprecated in favor of Tracing without Limits™. Documentation for this [deprecated configuration is still available](https://docs.datadoghq.com/tracing/legacy_app_analytics/).
1955
1957
 
1956
1958
  #### Application-side sampling
1957
-
1959
+
1958
1960
  While the trace agent can sample traces to reduce bandwidth usage, application-side sampling reduces the performance overhead.
1959
1961
 
1960
1962
  This will **reduce visibility and is not recommended**. See [DD_TRACE_SAMPLE_RATE](#environment-variables) for the recommended sampling approach.
@@ -2115,7 +2117,7 @@ For more details on how to activate distributed tracing for integrations, see th
2115
2117
 
2116
2118
  - [Excon](#excon)
2117
2119
  - [Faraday](#faraday)
2118
- - [Rest Client](#restclient)
2120
+ - [Rest Client](#rest-client)
2119
2121
  - [Net/HTTP](#nethttp)
2120
2122
  - [Rack](#rack)
2121
2123
  - [Rails](#rails)
@@ -2238,7 +2240,7 @@ In many cases, such as logging, it may be useful to correlate trace IDs to other
2238
2240
 
2239
2241
  ##### Automatic
2240
2242
 
2241
- For Rails applications using the default logger (`ActiveSupport::TaggedLogging`) or `lograge`, you can automatically enable trace correlation injection by setting the `rails` instrumentation configuration option `log_injection` to `true` or by setting environment variable `DD_LOGS_INJECTION=true`:
2243
+ For Rails applications using the default logger (`ActiveSupport::TaggedLogging`), `semantic_logger`, or `lograge`, you can automatically enable trace correlation injection by setting the `rails` instrumentation configuration option `log_injection` to `true` or by setting environment variable `DD_LOGS_INJECTION=true`:
2242
2244
 
2243
2245
  ```ruby
2244
2246
  # config/initializers/datadog.rb
@@ -2249,8 +2251,6 @@ Datadog.configure do |c|
2249
2251
  end
2250
2252
  ```
2251
2253
 
2252
- _Note:_ For `lograge` users who have also defined `lograge.custom_options` in an `initializers/lograge.rb` configuration file, due to the order that Rails loads initializers (alphabetical), automatic trace correlation may not take effect, since `initializers/datadog.rb` would be overwritten by the `initializers/lograge.rb` initializer. To support automatic trace correlation with _existing_ `lograge.custom_options`, use the [Manual (Lograge)](#manual-lograge) configuration below.
2253
-
2254
2254
  ##### Manual (Lograge)
2255
2255
 
2256
2256
  After [setting up Lograge in a Rails application](https://docs.datadoghq.com/logs/log_collection/ruby/), manually modify the `custom_options` block in your environment configuration file (e.g. `config/environments/production.rb`) to add the trace IDs.
@@ -2410,7 +2410,7 @@ The tracer and its integrations can produce some additional metrics that can pro
2410
2410
  To configure your application for metrics collection:
2411
2411
 
2412
2412
  1. [Configure your Datadog agent for StatsD](https://docs.datadoghq.com/developers/dogstatsd/#setup)
2413
- 2. Add `gem 'dogstatsd-ruby'` to your Gemfile
2413
+ 2. Add `gem 'dogstatsd-ruby', '~> 5.2'` to your Gemfile
2414
2414
 
2415
2415
  #### For application runtime
2416
2416
 
@@ -2480,3 +2480,49 @@ However, additional instrumentation provided by Datadog can be activated alongsi
2480
2480
  | `OpenTracing::FORMAT_TEXT_MAP` | Yes | |
2481
2481
  | `OpenTracing::FORMAT_RACK` | Yes | Because of the loss of resolution in the Rack format, please note that baggage items with names containing either upper case characters or `-` will be converted to lower case and `_` in a round-trip respectively. We recommend avoiding these characters or accommodating accordingly on the receiving end. |
2482
2482
  | `OpenTracing::FORMAT_BINARY` | No | |
2483
+
2484
+ ### Profiling
2485
+
2486
+ *Currently available as BETA feature.*
2487
+
2488
+ `ddtrace` can produce profiles that measure method-level application resource usage within production environments. These profiles can give insight into resources spent in Ruby code outside of existing trace instrumentation.
2489
+
2490
+ **Setup**
2491
+
2492
+ To get started with profiling, follow the [Profiler Getting Started Guide](https://docs.datadoghq.com/tracing/profiler/getting_started/?code-lang=ruby).
2493
+
2494
+ #### Profiling Resque jobs
2495
+
2496
+ When profiling [Resque](https://github.com/resque/resque) jobs, you should set the `RUN_AT_EXIT_HOOKS=1` option described in the [Resque](https://github.com/resque/resque/blob/v2.0.0/docs/HOOKS.md#worker-hooks) documentation.
2497
+
2498
+ Without this flag, profiles for short-lived Resque jobs will not be available as Resque kills worker processes before they have a chance to submit this information.
2499
+
2500
+ ## Known issues and suggested configurations
2501
+
2502
+ ### Payload too large
2503
+
2504
+ By default, Datadog limits the size of trace payloads to prevent memory overhead within instrumented applications. As a result, traces containing thousands of operations may not be sent to Datadog.
2505
+
2506
+ If traces are missing, enable [debug mode](#tracer-settings) to check if messages containing `"Dropping trace. Payload too large"` are logged.
2507
+
2508
+ Since debug mode is verbose, Datadog does not recommend leaving this enabled or enabling this in production. Disable it after confirming. You can inspect the [Datadog Agent logs](https://docs.datadoghq.com/agent/guide/agent-log-files/) for similar messages.
2509
+
2510
+ If you have confirmed that traces are dropped due to large payloads, then enable the [partial_flush](#tracer-settings) setting to break down large traces into smaller chunks.
2511
+
2512
+ ### Stack level too deep
2513
+
2514
+ Datadog tracing collects trace data by adding instrumentation into other common libraries (e.g. Rails, Rack, etc.) Some libraries provide APIs to add this instrumentation, but some do not. In order to add instrumentation into libraries lacking an instrumentation API, Datadog uses a technique called "monkey-patching" to modify the code of that library.
2515
+
2516
+ In Ruby version 1.9.3 and earlier, "monkey-patching" often involved the use of [`alias_method`](https://ruby-doc.org/core-3.0.0/Module.html#method-i-alias_method), also known as *method rewriting*, to destructively replace existing Ruby methods. However, this practice would often create conflicts & errors if two libraries attempted to "rewrite" the same method. (e.g. two different APM packages trying to instrument the same method.)
2517
+
2518
+ In Ruby 2.0, the [`Module#prepend`](https://ruby-doc.org/core-3.0.0/Module.html#method-i-prepend) feature was introduced. This feature avoids destructive method rewriting and allows multiple "monkey patches" on the same method. Consequently, it has become the safest, preferred means to "monkey patch" code.
2519
+
2520
+ Datadog instrumentation almost exclusively uses the `Module#prepend` feature to add instrumentation non-destructively. However, some libraries (typically those supporting Ruby < 2.0) still use `alias_method` which can create conflicts with Datadog instrumentation, often resulting in `SystemStackError` or `stack level too deep` errors.
2521
+
2522
+ As the implementation of `alias_method` exists within those libraries, Datadog generally cannot fix them. However, some libraries have known workarounds:
2523
+
2524
+ * `rack-mini-profiler`: [Net::HTTP stack level too deep errors](https://github.com/MiniProfiler/rack-mini-profiler#nethttp-stack-level-too-deep-errors).
2525
+
2526
+ For libraries without a known workaround, consider removing the library using `alias` or `Module#alias_method` or separating libraries into different environments for testing.
2527
+
2528
+ For any further questions or to report an occurence of this issue, please [reach out to Datadog support](https://docs.datadoghq.com/help)