ddtrace 0.45.0 → 0.50.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 (820) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +360 -56
  3. data/.circleci/images/primary/Dockerfile-2.1.10 +11 -1
  4. data/.circleci/images/primary/Dockerfile-2.2.10 +11 -1
  5. data/.circleci/images/primary/Dockerfile-2.3.8 +10 -0
  6. data/.circleci/images/primary/Dockerfile-2.4.6 +10 -0
  7. data/.circleci/images/primary/Dockerfile-2.5.6 +10 -0
  8. data/.circleci/images/primary/Dockerfile-2.6.4 +10 -0
  9. data/.circleci/images/primary/Dockerfile-2.7.0 +10 -0
  10. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +88 -0
  11. data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2.0.0} +1 -5
  12. data/.circleci/images/primary/{Dockerfile-2.0.0 → Dockerfile-truffleruby-21.1.0} +8 -8
  13. data/.dockerignore +0 -1
  14. data/.github/workflows/create-next-milestone.yml +2 -2
  15. data/.gitignore +0 -1
  16. data/.gitlab-ci.yml +18 -18
  17. data/.rubocop.yml +273 -7
  18. data/.rubocop_todo.yml +438 -0
  19. data/.simplecov +6 -0
  20. data/Appraisals +74 -101
  21. data/CHANGELOG.md +275 -1
  22. data/Gemfile +63 -3
  23. data/LICENSE-3rdparty.csv +2 -0
  24. data/Rakefile +299 -353
  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/bin/ddtracerb +15 -0
  29. data/ddtrace.gemspec +10 -38
  30. data/docker-compose.yml +68 -54
  31. data/docs/DevelopmentGuide.md +28 -0
  32. data/docs/GettingStarted.md +123 -73
  33. data/docs/ProfilingDevelopment.md +88 -0
  34. data/gemfiles/jruby_9.2.0.0_contrib.gemfile +79 -0
  35. data/gemfiles/jruby_9.2.0.0_contrib.gemfile.lock +1518 -0
  36. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile +35 -0
  37. data/gemfiles/jruby_9.2.0.0_contrib_old.gemfile.lock +157 -0
  38. data/gemfiles/jruby_9.2.0.0_core_old.gemfile +34 -0
  39. data/gemfiles/jruby_9.2.0.0_core_old.gemfile.lock +153 -0
  40. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile +35 -0
  41. data/gemfiles/jruby_9.2.0.0_cucumber3.gemfile.lock +174 -0
  42. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile +35 -0
  43. data/gemfiles/jruby_9.2.0.0_cucumber4.gemfile.lock +206 -0
  44. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile +35 -0
  45. data/gemfiles/jruby_9.2.0.0_cucumber5.gemfile.lock +206 -0
  46. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile +40 -0
  47. data/gemfiles/jruby_9.2.0.0_rails5_mysql2.gemfile.lock +271 -0
  48. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile +40 -0
  49. data/gemfiles/jruby_9.2.0.0_rails5_postgres.gemfile.lock +271 -0
  50. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile +41 -0
  51. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis.gemfile.lock +273 -0
  52. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile +41 -0
  53. data/gemfiles/jruby_9.2.0.0_rails5_postgres_redis_activesupport.gemfile.lock +273 -0
  54. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile +42 -0
  55. data/gemfiles/jruby_9.2.0.0_rails5_postgres_sidekiq.gemfile.lock +279 -0
  56. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile +40 -0
  57. data/gemfiles/jruby_9.2.0.0_rails61_mysql2.gemfile.lock +290 -0
  58. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile +40 -0
  59. data/gemfiles/jruby_9.2.0.0_rails61_postgres.gemfile.lock +290 -0
  60. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile +41 -0
  61. data/gemfiles/jruby_9.2.0.0_rails61_postgres_redis.gemfile.lock +292 -0
  62. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile +41 -0
  63. data/gemfiles/jruby_9.2.0.0_rails61_postgres_sidekiq.gemfile.lock +297 -0
  64. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile +40 -0
  65. data/gemfiles/jruby_9.2.0.0_rails6_mysql2.gemfile.lock +287 -0
  66. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile +40 -0
  67. data/gemfiles/jruby_9.2.0.0_rails6_postgres.gemfile.lock +287 -0
  68. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile +41 -0
  69. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis.gemfile.lock +289 -0
  70. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile +41 -0
  71. data/gemfiles/jruby_9.2.0.0_rails6_postgres_redis_activesupport.gemfile.lock +289 -0
  72. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile +42 -0
  73. data/gemfiles/jruby_9.2.0.0_rails6_postgres_sidekiq.gemfile.lock +295 -0
  74. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile +36 -0
  75. data/gemfiles/jruby_9.2.0.0_resque2_redis3.gemfile.lock +180 -0
  76. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile +36 -0
  77. data/gemfiles/jruby_9.2.0.0_resque2_redis4.gemfile.lock +180 -0
  78. data/gemfiles/jruby_9.2.11.1_contrib.gemfile +79 -0
  79. data/gemfiles/jruby_9.2.11.1_contrib.gemfile.lock +1518 -0
  80. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile +35 -0
  81. data/gemfiles/jruby_9.2.11.1_contrib_old.gemfile.lock +157 -0
  82. data/gemfiles/jruby_9.2.11.1_core_old.gemfile +34 -0
  83. data/gemfiles/jruby_9.2.11.1_core_old.gemfile.lock +153 -0
  84. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile +35 -0
  85. data/gemfiles/jruby_9.2.11.1_cucumber3.gemfile.lock +174 -0
  86. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile +35 -0
  87. data/gemfiles/jruby_9.2.11.1_cucumber4.gemfile.lock +206 -0
  88. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile +35 -0
  89. data/gemfiles/jruby_9.2.11.1_cucumber5.gemfile.lock +206 -0
  90. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile +40 -0
  91. data/gemfiles/jruby_9.2.11.1_rails5_mysql2.gemfile.lock +271 -0
  92. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile +40 -0
  93. data/gemfiles/jruby_9.2.11.1_rails5_postgres.gemfile.lock +271 -0
  94. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile +41 -0
  95. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis.gemfile.lock +273 -0
  96. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile +41 -0
  97. data/gemfiles/jruby_9.2.11.1_rails5_postgres_redis_activesupport.gemfile.lock +273 -0
  98. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile +42 -0
  99. data/gemfiles/jruby_9.2.11.1_rails5_postgres_sidekiq.gemfile.lock +279 -0
  100. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile +40 -0
  101. data/gemfiles/jruby_9.2.11.1_rails61_mysql2.gemfile.lock +290 -0
  102. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile +40 -0
  103. data/gemfiles/jruby_9.2.11.1_rails61_postgres.gemfile.lock +290 -0
  104. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile +41 -0
  105. data/gemfiles/jruby_9.2.11.1_rails61_postgres_redis.gemfile.lock +292 -0
  106. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile +41 -0
  107. data/gemfiles/jruby_9.2.11.1_rails61_postgres_sidekiq.gemfile.lock +297 -0
  108. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile +40 -0
  109. data/gemfiles/jruby_9.2.11.1_rails6_mysql2.gemfile.lock +287 -0
  110. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile +40 -0
  111. data/gemfiles/jruby_9.2.11.1_rails6_postgres.gemfile.lock +287 -0
  112. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile +41 -0
  113. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis.gemfile.lock +289 -0
  114. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile +41 -0
  115. data/gemfiles/jruby_9.2.11.1_rails6_postgres_redis_activesupport.gemfile.lock +289 -0
  116. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile +42 -0
  117. data/gemfiles/jruby_9.2.11.1_rails6_postgres_sidekiq.gemfile.lock +295 -0
  118. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile +36 -0
  119. data/gemfiles/jruby_9.2.11.1_resque2_redis3.gemfile.lock +180 -0
  120. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile +36 -0
  121. data/gemfiles/jruby_9.2.11.1_resque2_redis4.gemfile.lock +180 -0
  122. data/gemfiles/ruby_2.1.10_contrib_old.gemfile +66 -0
  123. data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +305 -0
  124. data/gemfiles/ruby_2.1.10_core_old.gemfile +33 -0
  125. data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +118 -0
  126. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +39 -0
  127. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +196 -0
  128. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +40 -0
  129. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +205 -0
  130. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +42 -0
  131. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +215 -0
  132. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +39 -0
  133. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +204 -0
  134. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +41 -0
  135. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +223 -0
  136. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +40 -0
  137. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +213 -0
  138. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +38 -0
  139. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +218 -0
  140. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +38 -0
  141. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +218 -0
  142. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +40 -0
  143. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +237 -0
  144. data/gemfiles/ruby_2.2.10_contrib.gemfile +73 -0
  145. data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +1450 -0
  146. data/gemfiles/ruby_2.2.10_core_old.gemfile +33 -0
  147. data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +118 -0
  148. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +39 -0
  149. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +196 -0
  150. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +40 -0
  151. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +205 -0
  152. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +41 -0
  153. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +212 -0
  154. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +39 -0
  155. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +204 -0
  156. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +41 -0
  157. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +223 -0
  158. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +40 -0
  159. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +213 -0
  160. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +38 -0
  161. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +218 -0
  162. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +38 -0
  163. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +218 -0
  164. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +40 -0
  165. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +237 -0
  166. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +40 -0
  167. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +229 -0
  168. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +38 -0
  169. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +234 -0
  170. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +38 -0
  171. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +234 -0
  172. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +39 -0
  173. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +236 -0
  174. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +39 -0
  175. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +236 -0
  176. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +40 -0
  177. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +245 -0
  178. data/gemfiles/ruby_2.3.8_contrib.gemfile +73 -0
  179. data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +1459 -0
  180. data/gemfiles/ruby_2.3.8_contrib_old.gemfile +34 -0
  181. data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +127 -0
  182. data/gemfiles/ruby_2.3.8_core_old.gemfile +33 -0
  183. data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +123 -0
  184. data/gemfiles/ruby_2.3.8_cucumber3.gemfile +34 -0
  185. data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +144 -0
  186. data/gemfiles/ruby_2.3.8_cucumber4.gemfile +34 -0
  187. data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +174 -0
  188. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +39 -0
  189. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +201 -0
  190. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +40 -0
  191. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +210 -0
  192. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +41 -0
  193. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +217 -0
  194. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +39 -0
  195. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +209 -0
  196. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +41 -0
  197. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +228 -0
  198. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +40 -0
  199. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +218 -0
  200. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +38 -0
  201. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +223 -0
  202. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +38 -0
  203. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +223 -0
  204. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +40 -0
  205. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +242 -0
  206. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +40 -0
  207. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +234 -0
  208. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +37 -0
  209. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +234 -0
  210. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +37 -0
  211. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +234 -0
  212. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +38 -0
  213. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +236 -0
  214. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +38 -0
  215. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +236 -0
  216. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +39 -0
  217. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +245 -0
  218. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +35 -0
  219. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +150 -0
  220. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +35 -0
  221. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +150 -0
  222. data/gemfiles/ruby_2.4.6_contrib.gemfile +78 -0
  223. data/gemfiles/ruby_2.4.6_contrib.gemfile.lock +1513 -0
  224. data/gemfiles/ruby_2.4.6_contrib_old.gemfile +38 -0
  225. data/gemfiles/ruby_2.4.6_contrib_old.gemfile.lock +155 -0
  226. data/gemfiles/ruby_2.4.6_core_old.gemfile +37 -0
  227. data/gemfiles/ruby_2.4.6_core_old.gemfile.lock +151 -0
  228. data/gemfiles/ruby_2.4.6_cucumber3.gemfile +38 -0
  229. data/gemfiles/ruby_2.4.6_cucumber3.gemfile.lock +172 -0
  230. data/gemfiles/ruby_2.4.6_cucumber4.gemfile +38 -0
  231. data/gemfiles/ruby_2.4.6_cucumber4.gemfile.lock +202 -0
  232. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile +41 -0
  233. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile.lock +262 -0
  234. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile +41 -0
  235. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile.lock +262 -0
  236. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile +42 -0
  237. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile.lock +264 -0
  238. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile +42 -0
  239. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile.lock +264 -0
  240. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile +43 -0
  241. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile.lock +273 -0
  242. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile +39 -0
  243. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile.lock +178 -0
  244. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile +39 -0
  245. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile.lock +178 -0
  246. data/gemfiles/ruby_2.5.6_contrib.gemfile +83 -0
  247. data/gemfiles/ruby_2.5.6_contrib.gemfile.lock +1526 -0
  248. data/gemfiles/ruby_2.5.6_contrib_old.gemfile +39 -0
  249. data/gemfiles/ruby_2.5.6_contrib_old.gemfile.lock +165 -0
  250. data/gemfiles/ruby_2.5.6_core_old.gemfile +38 -0
  251. data/gemfiles/ruby_2.5.6_core_old.gemfile.lock +161 -0
  252. data/gemfiles/ruby_2.5.6_cucumber3.gemfile +39 -0
  253. data/gemfiles/ruby_2.5.6_cucumber3.gemfile.lock +182 -0
  254. data/gemfiles/ruby_2.5.6_cucumber4.gemfile +39 -0
  255. data/gemfiles/ruby_2.5.6_cucumber4.gemfile.lock +214 -0
  256. data/gemfiles/ruby_2.5.6_cucumber5.gemfile +39 -0
  257. data/gemfiles/ruby_2.5.6_cucumber5.gemfile.lock +214 -0
  258. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile +44 -0
  259. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile.lock +276 -0
  260. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile +44 -0
  261. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile.lock +276 -0
  262. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile +45 -0
  263. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile.lock +278 -0
  264. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile +45 -0
  265. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  266. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile +46 -0
  267. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile.lock +284 -0
  268. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile +44 -0
  269. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile.lock +295 -0
  270. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile +44 -0
  271. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile.lock +295 -0
  272. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile +45 -0
  273. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile.lock +297 -0
  274. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile +45 -0
  275. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile.lock +302 -0
  276. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile +44 -0
  277. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile.lock +292 -0
  278. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile +44 -0
  279. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile.lock +292 -0
  280. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile +45 -0
  281. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile.lock +294 -0
  282. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile +45 -0
  283. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  284. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile +46 -0
  285. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile.lock +300 -0
  286. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile +40 -0
  287. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile.lock +188 -0
  288. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile +40 -0
  289. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile.lock +188 -0
  290. data/gemfiles/ruby_2.6.4_contrib.gemfile +79 -0
  291. data/gemfiles/ruby_2.6.4_contrib.gemfile.lock +1524 -0
  292. data/gemfiles/ruby_2.6.4_contrib_old.gemfile +39 -0
  293. data/gemfiles/ruby_2.6.4_contrib_old.gemfile.lock +167 -0
  294. data/gemfiles/ruby_2.6.4_core_old.gemfile +38 -0
  295. data/gemfiles/ruby_2.6.4_core_old.gemfile.lock +163 -0
  296. data/gemfiles/ruby_2.6.4_cucumber3.gemfile +39 -0
  297. data/gemfiles/ruby_2.6.4_cucumber3.gemfile.lock +184 -0
  298. data/gemfiles/ruby_2.6.4_cucumber4.gemfile +39 -0
  299. data/gemfiles/ruby_2.6.4_cucumber4.gemfile.lock +216 -0
  300. data/gemfiles/ruby_2.6.4_cucumber5.gemfile +39 -0
  301. data/gemfiles/ruby_2.6.4_cucumber5.gemfile.lock +216 -0
  302. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile +42 -0
  303. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile.lock +276 -0
  304. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile +42 -0
  305. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile.lock +276 -0
  306. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile +43 -0
  307. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile.lock +278 -0
  308. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile +43 -0
  309. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  310. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile +44 -0
  311. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile.lock +284 -0
  312. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile +42 -0
  313. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile.lock +295 -0
  314. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile +42 -0
  315. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile.lock +295 -0
  316. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile +43 -0
  317. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile.lock +297 -0
  318. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile +43 -0
  319. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile.lock +302 -0
  320. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile +42 -0
  321. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile.lock +292 -0
  322. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile +42 -0
  323. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile.lock +292 -0
  324. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile +43 -0
  325. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile.lock +294 -0
  326. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile +43 -0
  327. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  328. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile +44 -0
  329. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile.lock +300 -0
  330. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile +40 -0
  331. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile.lock +190 -0
  332. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile +40 -0
  333. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile.lock +190 -0
  334. data/gemfiles/ruby_2.7.0_contrib.gemfile +78 -0
  335. data/gemfiles/ruby_2.7.0_contrib.gemfile.lock +1523 -0
  336. data/gemfiles/ruby_2.7.0_contrib_old.gemfile +39 -0
  337. data/gemfiles/ruby_2.7.0_contrib_old.gemfile.lock +167 -0
  338. data/gemfiles/ruby_2.7.0_core_old.gemfile +38 -0
  339. data/gemfiles/ruby_2.7.0_core_old.gemfile.lock +163 -0
  340. data/gemfiles/ruby_2.7.0_cucumber3.gemfile +39 -0
  341. data/gemfiles/ruby_2.7.0_cucumber3.gemfile.lock +184 -0
  342. data/gemfiles/ruby_2.7.0_cucumber4.gemfile +39 -0
  343. data/gemfiles/ruby_2.7.0_cucumber4.gemfile.lock +216 -0
  344. data/gemfiles/ruby_2.7.0_cucumber5.gemfile +39 -0
  345. data/gemfiles/ruby_2.7.0_cucumber5.gemfile.lock +216 -0
  346. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile +42 -0
  347. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile.lock +276 -0
  348. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile +42 -0
  349. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile.lock +276 -0
  350. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile +44 -0
  351. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile.lock +295 -0
  352. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile +44 -0
  353. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile.lock +295 -0
  354. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile +44 -0
  355. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile.lock +284 -0
  356. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile +42 -0
  357. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile.lock +295 -0
  358. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile +42 -0
  359. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile.lock +295 -0
  360. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile +43 -0
  361. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile.lock +297 -0
  362. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile +43 -0
  363. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile.lock +302 -0
  364. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile +42 -0
  365. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile.lock +292 -0
  366. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile +42 -0
  367. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile.lock +292 -0
  368. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile +44 -0
  369. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile.lock +311 -0
  370. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile +44 -0
  371. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile.lock +311 -0
  372. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile +44 -0
  373. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile.lock +300 -0
  374. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile +40 -0
  375. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile.lock +190 -0
  376. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile +40 -0
  377. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile.lock +190 -0
  378. data/gemfiles/ruby_3.0.0_contrib.gemfile +78 -0
  379. data/gemfiles/ruby_3.0.0_contrib.gemfile.lock +1540 -0
  380. data/gemfiles/ruby_3.0.0_core_old.gemfile +39 -0
  381. data/gemfiles/ruby_3.0.0_core_old.gemfile.lock +165 -0
  382. data/gemfiles/ruby_3.0.0_cucumber3.gemfile +40 -0
  383. data/gemfiles/ruby_3.0.0_cucumber3.gemfile.lock +186 -0
  384. data/gemfiles/ruby_3.0.0_cucumber4.gemfile +40 -0
  385. data/gemfiles/ruby_3.0.0_cucumber4.gemfile.lock +218 -0
  386. data/gemfiles/ruby_3.0.0_cucumber5.gemfile +40 -0
  387. data/gemfiles/ruby_3.0.0_cucumber5.gemfile.lock +218 -0
  388. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile +43 -0
  389. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile.lock +295 -0
  390. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile +43 -0
  391. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile.lock +295 -0
  392. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile +44 -0
  393. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile.lock +297 -0
  394. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile +44 -0
  395. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile.lock +302 -0
  396. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile +41 -0
  397. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile.lock +192 -0
  398. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile +41 -0
  399. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile.lock +192 -0
  400. data/integration/README.md +67 -0
  401. data/integration/apps/rack/.dockerignore +1 -0
  402. data/integration/apps/rack/.envrc.sample +1 -0
  403. data/integration/apps/rack/.gitignore +4 -0
  404. data/integration/apps/rack/.rspec +1 -0
  405. data/integration/apps/rack/Dockerfile +28 -0
  406. data/integration/apps/rack/Dockerfile-ci +11 -0
  407. data/integration/apps/rack/Gemfile +24 -0
  408. data/integration/apps/rack/README.md +93 -0
  409. data/integration/apps/rack/app/acme.rb +80 -0
  410. data/integration/apps/rack/app/datadog.rb +17 -0
  411. data/integration/apps/rack/bin/run +22 -0
  412. data/integration/apps/rack/bin/setup +17 -0
  413. data/integration/apps/rack/bin/test +24 -0
  414. data/integration/apps/rack/config.ru +6 -0
  415. data/integration/apps/rack/config/puma.rb +14 -0
  416. data/integration/apps/rack/config/unicorn.rb +23 -0
  417. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  418. data/integration/apps/rack/docker-compose.yml +78 -0
  419. data/integration/apps/rack/script/build-images +38 -0
  420. data/integration/apps/rack/script/ci +51 -0
  421. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  422. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  423. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  424. data/integration/apps/rails-five/.dockerignore +1 -0
  425. data/integration/apps/rails-five/.env +3 -0
  426. data/integration/apps/rails-five/.envrc.sample +1 -0
  427. data/integration/apps/rails-five/.gitignore +30 -0
  428. data/integration/apps/rails-five/Dockerfile +25 -0
  429. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  430. data/integration/apps/rails-five/Gemfile +104 -0
  431. data/integration/apps/rails-five/README.md +94 -0
  432. data/integration/apps/rails-five/Rakefile +6 -0
  433. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  434. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  435. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  436. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  437. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  438. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  439. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  440. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  441. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  442. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  443. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  444. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  445. data/integration/apps/rails-five/app/models/test.rb +2 -0
  446. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  447. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  448. data/integration/apps/rails-five/bin/bundle +3 -0
  449. data/integration/apps/rails-five/bin/rails +9 -0
  450. data/integration/apps/rails-five/bin/rake +9 -0
  451. data/integration/apps/rails-five/bin/run +24 -0
  452. data/integration/apps/rails-five/bin/setup +27 -0
  453. data/integration/apps/rails-five/bin/spring +17 -0
  454. data/integration/apps/rails-five/bin/test +21 -0
  455. data/integration/apps/rails-five/bin/update +28 -0
  456. data/integration/apps/rails-five/config.ru +5 -0
  457. data/integration/apps/rails-five/config/application.rb +97 -0
  458. data/integration/apps/rails-five/config/boot.rb +4 -0
  459. data/integration/apps/rails-five/config/cable.yml +10 -0
  460. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  461. data/integration/apps/rails-five/config/database.yml +28 -0
  462. data/integration/apps/rails-five/config/environment.rb +5 -0
  463. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  464. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  465. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  466. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  467. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  468. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  469. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  470. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  471. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  472. data/integration/apps/rails-five/config/puma.rb +24 -0
  473. data/integration/apps/rails-five/config/routes.rb +11 -0
  474. data/integration/apps/rails-five/config/spring.rb +6 -0
  475. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  476. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  477. data/integration/apps/rails-five/db/schema.rb +23 -0
  478. data/integration/apps/rails-five/db/seeds.rb +7 -0
  479. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  480. data/integration/apps/rails-five/docker-compose.yml +100 -0
  481. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  482. data/integration/apps/rails-five/log/.keep +0 -0
  483. data/integration/apps/rails-five/public/robots.txt +1 -0
  484. data/integration/apps/rails-five/script/build-images +35 -0
  485. data/integration/apps/rails-five/script/ci +51 -0
  486. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  487. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  488. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  489. data/integration/apps/rails-five/storage/.keep +0 -0
  490. data/integration/apps/rails-five/tmp/.keep +0 -0
  491. data/integration/apps/rails-five/vendor/.keep +0 -0
  492. data/integration/apps/rspec/.dockerignore +1 -0
  493. data/integration/apps/rspec/.envrc.sample +1 -0
  494. data/integration/apps/rspec/.gitignore +2 -0
  495. data/integration/apps/rspec/.rspec +1 -0
  496. data/integration/apps/rspec/Dockerfile +25 -0
  497. data/integration/apps/rspec/Dockerfile-ci +11 -0
  498. data/integration/apps/rspec/Gemfile +14 -0
  499. data/integration/apps/rspec/README.md +70 -0
  500. data/integration/apps/rspec/agent.yaml +3 -0
  501. data/integration/apps/rspec/app/datadog.rb +13 -0
  502. data/integration/apps/rspec/app/fibonacci.rb +30 -0
  503. data/integration/apps/rspec/bin/run +20 -0
  504. data/integration/apps/rspec/bin/setup +17 -0
  505. data/integration/apps/rspec/bin/test +21 -0
  506. data/integration/apps/rspec/docker-compose.ci.yml +51 -0
  507. data/integration/apps/rspec/docker-compose.yml +63 -0
  508. data/integration/apps/rspec/script/build-images +37 -0
  509. data/integration/apps/rspec/script/ci +53 -0
  510. data/integration/apps/rspec/spec/fibonacci_spec.rb +16 -0
  511. data/integration/apps/rspec/spec/rspec_spec.rb +58 -0
  512. data/integration/apps/rspec/spec/spec_helper.rb +24 -0
  513. data/integration/apps/ruby/.dockerignore +1 -0
  514. data/integration/apps/ruby/.envrc.sample +1 -0
  515. data/integration/apps/ruby/.gitignore +2 -0
  516. data/integration/apps/ruby/Dockerfile +25 -0
  517. data/integration/apps/ruby/Dockerfile-ci +11 -0
  518. data/integration/apps/ruby/Gemfile +11 -0
  519. data/integration/apps/ruby/README.md +70 -0
  520. data/integration/apps/ruby/agent.yaml +3 -0
  521. data/integration/apps/ruby/app/datadog.rb +13 -0
  522. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  523. data/integration/apps/ruby/bin/run +20 -0
  524. data/integration/apps/ruby/bin/setup +17 -0
  525. data/integration/apps/ruby/bin/test +21 -0
  526. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  527. data/integration/apps/ruby/docker-compose.yml +63 -0
  528. data/integration/apps/ruby/script/build-images +38 -0
  529. data/integration/apps/ruby/script/ci +51 -0
  530. data/integration/images/agent/Dockerfile +2 -0
  531. data/integration/images/agent/agent.yaml +3 -0
  532. data/integration/images/include/datadog/analyzer.rb +71 -0
  533. data/integration/images/include/datadog/demo_env.rb +101 -0
  534. data/integration/images/include/http-health-check +33 -0
  535. data/integration/images/ruby/2.1/Dockerfile +54 -0
  536. data/integration/images/ruby/2.2/Dockerfile +54 -0
  537. data/integration/images/ruby/2.3/Dockerfile +70 -0
  538. data/integration/images/ruby/2.4/Dockerfile +54 -0
  539. data/integration/images/ruby/2.5/Dockerfile +54 -0
  540. data/integration/images/ruby/2.6/Dockerfile +54 -0
  541. data/integration/images/ruby/2.7/Dockerfile +54 -0
  542. data/integration/images/ruby/3.0/Dockerfile +54 -0
  543. data/integration/images/wrk/Dockerfile +33 -0
  544. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  545. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  546. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  547. data/integration/script/build-images +43 -0
  548. data/lib/datadog/ci.rb +16 -0
  549. data/lib/datadog/ci/configuration/components.rb +30 -0
  550. data/lib/datadog/ci/configuration/settings.rb +36 -0
  551. data/lib/datadog/ci/context_flush.rb +28 -0
  552. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +30 -0
  553. data/lib/datadog/ci/contrib/cucumber/ext.rb +19 -0
  554. data/lib/datadog/ci/contrib/cucumber/formatter.rb +97 -0
  555. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +26 -0
  556. data/lib/datadog/ci/contrib/cucumber/integration.rb +47 -0
  557. data/lib/datadog/ci/contrib/cucumber/patcher.rb +25 -0
  558. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +30 -0
  559. data/lib/datadog/ci/contrib/rspec/example.rb +73 -0
  560. data/lib/datadog/ci/contrib/rspec/ext.rb +18 -0
  561. data/lib/datadog/ci/contrib/rspec/integration.rb +48 -0
  562. data/lib/datadog/ci/contrib/rspec/patcher.rb +25 -0
  563. data/lib/datadog/ci/ext/app_types.rb +9 -0
  564. data/lib/datadog/ci/ext/environment.rb +303 -0
  565. data/lib/datadog/ci/ext/settings.rb +10 -0
  566. data/lib/datadog/ci/ext/test.rb +28 -0
  567. data/lib/datadog/ci/extensions.rb +17 -0
  568. data/lib/datadog/ci/test.rb +63 -0
  569. data/lib/ddtrace.rb +1 -7
  570. data/lib/ddtrace/analytics.rb +2 -0
  571. data/lib/ddtrace/buffer.rb +4 -4
  572. data/lib/ddtrace/configuration.rb +98 -25
  573. data/lib/ddtrace/configuration/agent_settings_resolver.rb +230 -0
  574. data/lib/ddtrace/configuration/base.rb +7 -10
  575. data/lib/ddtrace/configuration/components.rb +119 -21
  576. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  577. data/lib/ddtrace/configuration/options.rb +6 -9
  578. data/lib/ddtrace/configuration/settings.rb +110 -7
  579. data/lib/ddtrace/context.rb +22 -20
  580. data/lib/ddtrace/context_flush.rb +14 -2
  581. data/lib/ddtrace/context_provider.rb +0 -1
  582. data/lib/ddtrace/contrib/action_cable/event.rb +5 -4
  583. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +2 -4
  584. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +1 -1
  585. data/lib/ddtrace/contrib/action_pack/utils.rb +1 -1
  586. data/lib/ddtrace/contrib/action_view/event.rb +3 -3
  587. data/lib/ddtrace/contrib/action_view/patcher.rb +4 -4
  588. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  589. data/lib/ddtrace/contrib/active_model_serializers/event.rb +2 -2
  590. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +30 -0
  591. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +107 -18
  592. data/lib/ddtrace/contrib/active_record/event.rb +2 -2
  593. data/lib/ddtrace/contrib/active_record/utils.rb +1 -0
  594. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +7 -7
  595. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -5
  596. data/lib/ddtrace/contrib/active_support/notifications/event.rb +4 -3
  597. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +2 -1
  598. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  599. data/lib/ddtrace/contrib/auto_instrument.rb +2 -2
  600. data/lib/ddtrace/contrib/aws/instrumentation.rb +29 -0
  601. data/lib/ddtrace/contrib/aws/patcher.rb +5 -0
  602. data/lib/ddtrace/contrib/aws/services.rb +2 -0
  603. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +1 -1
  604. data/lib/ddtrace/contrib/configurable.rb +64 -40
  605. data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
  606. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -20
  607. data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
  608. data/lib/ddtrace/contrib/dalli/instrumentation.rb +1 -1
  609. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -39
  610. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -1
  611. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  612. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  613. data/lib/ddtrace/contrib/ethon/easy_patch.rb +6 -6
  614. data/lib/ddtrace/contrib/ethon/multi_patch.rb +1 -1
  615. data/lib/ddtrace/contrib/ethon/patcher.rb +2 -2
  616. data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
  617. data/lib/ddtrace/contrib/extensions.rb +30 -6
  618. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  619. data/lib/ddtrace/contrib/faraday/patcher.rb +2 -38
  620. data/lib/ddtrace/contrib/grape/endpoint.rb +8 -15
  621. data/lib/ddtrace/contrib/grape/instrumentation.rb +2 -2
  622. data/lib/ddtrace/contrib/grape/patcher.rb +1 -43
  623. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  624. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  625. data/lib/ddtrace/contrib/grpc/patcher.rb +1 -37
  626. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  627. data/lib/ddtrace/contrib/http/instrumentation.rb +6 -6
  628. data/lib/ddtrace/contrib/http/patcher.rb +1 -1
  629. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +15 -20
  630. data/lib/ddtrace/contrib/httpclient/patcher.rb +6 -3
  631. data/lib/ddtrace/contrib/httprb/instrumentation.rb +15 -21
  632. data/lib/ddtrace/contrib/httprb/patcher.rb +6 -3
  633. data/lib/ddtrace/contrib/integration.rb +3 -3
  634. data/lib/ddtrace/contrib/kafka/event.rb +2 -2
  635. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +4 -2
  636. data/lib/ddtrace/contrib/mongodb/patcher.rb +2 -2
  637. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  638. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
  639. data/lib/ddtrace/contrib/mysql2/patcher.rb +1 -1
  640. data/lib/ddtrace/contrib/patchable.rb +2 -2
  641. data/lib/ddtrace/contrib/patcher.rb +10 -7
  642. data/lib/ddtrace/contrib/presto/instrumentation.rb +1 -1
  643. data/lib/ddtrace/contrib/presto/patcher.rb +6 -3
  644. data/lib/ddtrace/contrib/qless/patcher.rb +3 -5
  645. data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
  646. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
  647. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  648. data/lib/ddtrace/contrib/que/tracer.rb +1 -1
  649. data/lib/ddtrace/contrib/racecar/event.rb +3 -2
  650. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  651. data/lib/ddtrace/contrib/rack/middlewares.rb +5 -10
  652. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  653. data/lib/ddtrace/contrib/rails/patcher.rb +6 -2
  654. data/lib/ddtrace/contrib/rake/instrumentation.rb +5 -3
  655. data/lib/ddtrace/contrib/rake/patcher.rb +1 -1
  656. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
  657. data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
  658. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  659. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  660. data/lib/ddtrace/contrib/registerable.rb +2 -2
  661. data/lib/ddtrace/contrib/registry.rb +2 -2
  662. data/lib/ddtrace/contrib/resque/configuration/settings.rb +17 -1
  663. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  664. data/lib/ddtrace/contrib/resque/patcher.rb +4 -4
  665. data/lib/ddtrace/contrib/resque/resque_job.rb +24 -1
  666. data/lib/ddtrace/contrib/rest_client/patcher.rb +1 -1
  667. data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -4
  668. data/lib/ddtrace/contrib/sequel/database.rb +1 -1
  669. data/lib/ddtrace/contrib/sequel/dataset.rb +1 -1
  670. data/lib/ddtrace/contrib/sequel/patcher.rb +2 -2
  671. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  672. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  673. data/lib/ddtrace/contrib/shoryuken/tracer.rb +7 -4
  674. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -7
  675. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  676. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  677. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  678. data/lib/ddtrace/contrib/sinatra/patcher.rb +1 -1
  679. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  680. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -3
  681. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  682. data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
  683. data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
  684. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +4 -6
  685. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +4 -0
  686. data/lib/ddtrace/correlation.rb +1 -0
  687. data/lib/ddtrace/diagnostics/environment_logger.rb +5 -4
  688. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  689. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  690. data/lib/ddtrace/error.rb +77 -8
  691. data/lib/ddtrace/ext/app_types.rb +0 -1
  692. data/lib/ddtrace/ext/distributed.rb +1 -1
  693. data/lib/ddtrace/ext/http.rb +1 -1
  694. data/lib/ddtrace/ext/profiling.rb +53 -0
  695. data/lib/ddtrace/ext/runtime.rb +3 -1
  696. data/lib/ddtrace/ext/test.rb +2 -18
  697. data/lib/ddtrace/ext/transport.rb +2 -0
  698. data/lib/ddtrace/forced_tracing.rb +2 -0
  699. data/lib/ddtrace/logger.rb +1 -1
  700. data/lib/ddtrace/metrics.rb +42 -9
  701. data/lib/ddtrace/opentelemetry/extensions.rb +1 -1
  702. data/lib/ddtrace/opentracer.rb +20 -39
  703. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  704. data/lib/ddtrace/opentracer/span.rb +2 -6
  705. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  706. data/lib/ddtrace/patcher.rb +27 -6
  707. data/lib/ddtrace/pin.rb +8 -61
  708. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  709. data/lib/ddtrace/profiling.rb +107 -0
  710. data/lib/ddtrace/profiling/backtrace_location.rb +32 -0
  711. data/lib/ddtrace/profiling/buffer.rb +41 -0
  712. data/lib/ddtrace/profiling/collectors/stack.rb +262 -0
  713. data/lib/ddtrace/profiling/encoding/profile.rb +37 -0
  714. data/lib/ddtrace/profiling/event.rb +13 -0
  715. data/lib/ddtrace/profiling/events/stack.rb +102 -0
  716. data/lib/ddtrace/profiling/exporter.rb +23 -0
  717. data/lib/ddtrace/profiling/ext/cpu.rb +52 -0
  718. data/lib/ddtrace/profiling/ext/cthread.rb +155 -0
  719. data/lib/ddtrace/profiling/ext/forking.rb +97 -0
  720. data/lib/ddtrace/profiling/flush.rb +43 -0
  721. data/lib/ddtrace/profiling/pprof/builder.rb +119 -0
  722. data/lib/ddtrace/profiling/pprof/converter.rb +89 -0
  723. data/lib/ddtrace/profiling/pprof/message_set.rb +12 -0
  724. data/lib/ddtrace/profiling/pprof/payload.rb +18 -0
  725. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  726. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +81 -0
  727. data/lib/ddtrace/profiling/pprof/stack_sample.rb +106 -0
  728. data/lib/ddtrace/profiling/pprof/string_table.rb +10 -0
  729. data/lib/ddtrace/profiling/pprof/template.rb +118 -0
  730. data/lib/ddtrace/profiling/preload.rb +3 -0
  731. data/lib/ddtrace/profiling/profiler.rb +30 -0
  732. data/lib/ddtrace/profiling/recorder.rb +95 -0
  733. data/lib/ddtrace/profiling/scheduler.rb +116 -0
  734. data/lib/ddtrace/profiling/tasks/setup.rb +77 -0
  735. data/lib/ddtrace/profiling/transport/client.rb +12 -0
  736. data/lib/ddtrace/profiling/transport/http.rb +118 -0
  737. data/lib/ddtrace/profiling/transport/http/api.rb +43 -0
  738. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +100 -0
  739. data/lib/ddtrace/profiling/transport/http/api/instance.rb +36 -0
  740. data/lib/ddtrace/profiling/transport/http/api/spec.rb +40 -0
  741. data/lib/ddtrace/profiling/transport/http/builder.rb +28 -0
  742. data/lib/ddtrace/profiling/transport/http/client.rb +33 -0
  743. data/lib/ddtrace/profiling/transport/http/response.rb +21 -0
  744. data/lib/ddtrace/profiling/transport/io.rb +30 -0
  745. data/lib/ddtrace/profiling/transport/io/client.rb +27 -0
  746. data/lib/ddtrace/profiling/transport/io/response.rb +16 -0
  747. data/lib/ddtrace/profiling/transport/parcel.rb +17 -0
  748. data/lib/ddtrace/profiling/transport/request.rb +15 -0
  749. data/lib/ddtrace/profiling/transport/response.rb +8 -0
  750. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  751. data/lib/ddtrace/quantization/http.rb +1 -0
  752. data/lib/ddtrace/runtime/cgroup.rb +2 -2
  753. data/lib/ddtrace/runtime/container.rb +43 -29
  754. data/lib/ddtrace/runtime/identity.rb +8 -0
  755. data/lib/ddtrace/runtime/metrics.rb +3 -5
  756. data/lib/ddtrace/sampler.rb +1 -1
  757. data/lib/ddtrace/sampling/rule_sampler.rb +4 -9
  758. data/lib/ddtrace/span.rb +7 -7
  759. data/lib/ddtrace/sync_writer.rb +14 -13
  760. data/lib/ddtrace/tasks/exec.rb +48 -0
  761. data/lib/ddtrace/tasks/help.rb +14 -0
  762. data/lib/ddtrace/tracer.rb +43 -37
  763. data/lib/ddtrace/transport/http.rb +41 -31
  764. data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
  765. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  766. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  767. data/lib/ddtrace/transport/http/builder.rb +7 -1
  768. data/lib/ddtrace/transport/http/env.rb +8 -0
  769. data/lib/ddtrace/transport/http/statistics.rb +2 -2
  770. data/lib/ddtrace/transport/http/traces.rb +5 -6
  771. data/lib/ddtrace/transport/io.rb +1 -1
  772. data/lib/ddtrace/transport/io/client.rb +15 -8
  773. data/lib/ddtrace/transport/io/response.rb +1 -3
  774. data/lib/ddtrace/transport/io/traces.rb +7 -1
  775. data/lib/ddtrace/transport/parcel.rb +4 -0
  776. data/lib/ddtrace/transport/traces.rb +18 -1
  777. data/lib/ddtrace/utils/compression.rb +27 -0
  778. data/lib/ddtrace/utils/forking.rb +1 -1
  779. data/lib/ddtrace/utils/object_set.rb +39 -0
  780. data/lib/ddtrace/utils/only_once.rb +40 -0
  781. data/lib/ddtrace/utils/sequence.rb +17 -0
  782. data/lib/ddtrace/utils/string_table.rb +45 -0
  783. data/lib/ddtrace/utils/time.rb +32 -3
  784. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  785. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  786. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  787. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  788. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  789. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  790. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  791. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  792. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  793. data/lib/ddtrace/version.rb +14 -2
  794. data/lib/ddtrace/workers.rb +6 -1
  795. data/lib/ddtrace/workers/async.rb +13 -4
  796. data/lib/ddtrace/workers/loop.rb +31 -5
  797. data/lib/ddtrace/workers/polling.rb +12 -5
  798. data/lib/ddtrace/workers/queue.rb +2 -1
  799. data/lib/ddtrace/workers/runtime_metrics.rb +14 -1
  800. data/lib/ddtrace/workers/trace_writer.rb +11 -14
  801. data/lib/ddtrace/writer.rb +11 -5
  802. metadata +620 -408
  803. data/lib/ddtrace/augmentation.rb +0 -13
  804. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  805. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  806. data/lib/ddtrace/augmentation/shim.rb +0 -102
  807. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -38
  808. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -19
  809. data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -104
  810. data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
  811. data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
  812. data/lib/ddtrace/contrib/cucumber/patcher.rb +0 -23
  813. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -38
  814. data/lib/ddtrace/contrib/rspec/example.rb +0 -61
  815. data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
  816. data/lib/ddtrace/contrib/rspec/ext.rb +0 -19
  817. data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
  818. data/lib/ddtrace/contrib/rspec/patcher.rb +0 -25
  819. data/lib/ddtrace/ext/ci.rb +0 -297
  820. data/lib/ddtrace/monkey.rb +0 -58
@@ -61,6 +61,7 @@ module Datadog
61
61
  # e.g. Reduces "foo&bar=bar&bar=bar&foo" to "foo&bar=bar&bar=bar"
62
62
  def collect_query(query, options = {})
63
63
  return query unless block_given?
64
+
64
65
  uniq = options[:uniq].nil? ? false : options[:uniq]
65
66
  keys = Set.new
66
67
 
@@ -4,7 +4,7 @@ module Datadog
4
4
  module Runtime
5
5
  # For control groups
6
6
  module Cgroup
7
- LINE_REGEX = /^(\d+):([^:]*):(.+)$/
7
+ LINE_REGEX = /^(\d+):([^:]*):(.+)$/.freeze
8
8
 
9
9
  Descriptor = Struct.new(
10
10
  :id,
@@ -21,7 +21,7 @@ module Datadog
21
21
  filepath = "/proc/#{process}/cgroup"
22
22
 
23
23
  if File.exist?(filepath)
24
- File.open("/proc/#{process}/cgroup").each do |line|
24
+ File.foreach("/proc/#{process}/cgroup") do |line|
25
25
  line = line.strip
26
26
  descriptors << parse(line) unless line.empty?
27
27
  end
@@ -8,8 +8,10 @@ module Datadog
8
8
  UUID_PATTERN = '[0-9a-f]{8}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{12}'.freeze
9
9
  CONTAINER_PATTERN = '[0-9a-f]{64}'.freeze
10
10
 
11
- POD_REGEX = /(pod)?(#{UUID_PATTERN})(?:.slice)?$/
12
- CONTAINER_REGEX = /(#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)?$/
11
+ PLATFORM_REGEX = /(?<platform>.*?)(?:.slice)?$/.freeze
12
+ POD_REGEX = /(?<pod>(pod)?#{UUID_PATTERN})(?:.slice)?$/.freeze
13
+ CONTAINER_REGEX = /(?<container>#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)?$/.freeze
14
+ FARGATE_14_CONTAINER_REGEX = /(?<container>[0-9a-f]{32}-[0-9]{10})/.freeze
13
15
 
14
16
  Descriptor = Struct.new(
15
17
  :platform,
@@ -32,39 +34,51 @@ module Datadog
32
34
  end
33
35
 
34
36
  def descriptor
35
- @descriptor ||= begin
36
- Descriptor.new.tap do |descriptor|
37
- begin
38
- Cgroup.descriptors.each do |cgroup_descriptor|
39
- # Parse container data from cgroup descriptor
40
- path = cgroup_descriptor.path
41
- next if path.nil?
37
+ @descriptor ||= Descriptor.new.tap do |descriptor|
38
+ begin
39
+ Cgroup.descriptors.each do |cgroup_descriptor|
40
+ # Parse container data from cgroup descriptor
41
+ path = cgroup_descriptor.path
42
+ next if path.nil?
42
43
 
43
- # Split path into parts
44
- parts = path.split('/')
45
- parts.shift # Remove leading empty part
46
- next if parts.length < 2
44
+ # Split path into parts
45
+ parts = path.split('/')
46
+ parts.shift # Remove leading empty part
47
47
 
48
- # Read info from path
49
- platform = parts[0]
50
- container_id = parts[-1][CONTAINER_REGEX]
51
- task_uid = parts[-2][POD_REGEX]
48
+ # Read info from path
49
+ next if parts.empty?
52
50
 
53
- # If container ID wasn't found, ignore.
54
- # Path might describe a non-container environment.
55
- next if container_id.nil?
51
+ platform = parts[0][PLATFORM_REGEX, :platform]
52
+ container_id, task_uid = nil
56
53
 
57
- descriptor.platform = platform
58
- descriptor.container_id = container_id
59
- descriptor.task_uid = task_uid
60
-
61
- break
54
+ case parts.length
55
+ when 0..1
56
+ next
57
+ when 2
58
+ container_id = parts[-1][CONTAINER_REGEX, :container] \
59
+ || parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
60
+ else
61
+ if (container_id = parts[-1][CONTAINER_REGEX, :container])
62
+ task_uid = parts[-2][POD_REGEX, :pod]
63
+ else
64
+ container_id = parts[-1][FARGATE_14_CONTAINER_REGEX, :container]
65
+ end
62
66
  end
63
- rescue StandardError => e
64
- Datadog.logger.error(
65
- "Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
66
- )
67
+
68
+ # If container ID wasn't found, ignore.
69
+ # Path might describe a non-container environment.
70
+ next if container_id.nil?
71
+
72
+ descriptor.platform = platform
73
+ descriptor.container_id = container_id
74
+ descriptor.task_uid = task_uid
75
+
76
+ break
67
77
  end
78
+ rescue StandardError => e
79
+ Datadog.logger.error(
80
+ "Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
81
+ )
68
82
  end
69
83
  end
70
84
  end
@@ -24,10 +24,18 @@ module Datadog
24
24
  Ext::Runtime::LANG
25
25
  end
26
26
 
27
+ def lang_engine
28
+ Ext::Runtime::LANG_ENGINE
29
+ end
30
+
27
31
  def lang_interpreter
28
32
  Ext::Runtime::LANG_INTERPRETER
29
33
  end
30
34
 
35
+ def lang_platform
36
+ Ext::Runtime::LANG_PLATFORM
37
+ end
38
+
31
39
  def lang_version
32
40
  Ext::Runtime::LANG_VERSION
33
41
  end
@@ -58,11 +58,9 @@ module Datadog
58
58
  end
59
59
 
60
60
  def gc_metrics
61
- Hash[
62
- GC.stat.flat_map do |k, v|
63
- nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v)
64
- end
65
- ]
61
+ GC.stat.flat_map do |k, v|
62
+ nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v)
63
+ end.to_h
66
64
  end
67
65
 
68
66
  def try_flush
@@ -81,7 +81,7 @@ module Datadog
81
81
  :default_key
82
82
 
83
83
  def initialize(default_key, default_rate = 1.0, &block)
84
- raise ArgumentError, 'No resolver given!' unless block_given?
84
+ raise ArgumentError, 'No resolver given!' unless block
85
85
 
86
86
  @default_key = default_key
87
87
  @resolver = block
@@ -5,6 +5,7 @@ require 'ddtrace/ext/priority'
5
5
  require 'ddtrace/ext/sampling'
6
6
  require 'ddtrace/sampler'
7
7
  require 'ddtrace/sampling/rate_limiter'
8
+ require 'ddtrace/sampling/rule'
8
9
 
9
10
  module Datadog
10
11
  module Sampling
@@ -45,15 +46,8 @@ module Datadog
45
46
  @default_sampler = if default_sampler
46
47
  default_sampler
47
48
  elsif default_sample_rate
48
- # We want to allow 0.0 to drop all traces, but \RateSampler
49
- # considers 0.0 an invalid rate and falls back to 100% sampling.
50
- #
51
- # We address that here by not setting the rate in the constructor,
52
- # but using the setter method.
53
- #
54
- # We don't want to make this change directly to \RateSampler
55
- # because it breaks its current contract to existing users.
56
- Datadog::RateSampler.new.tap { |s| s.sample_rate = default_sample_rate }
49
+ # Add to the end of the rule list a rule always matches any span
50
+ @rules << SimpleRule.new(sample_rate: default_sample_rate)
57
51
  else
58
52
  RateByServiceSampler.new(1.0, env: -> { Datadog.tracer.tags[:env] })
59
53
  end
@@ -88,6 +82,7 @@ module Datadog
88
82
 
89
83
  def update(*args)
90
84
  return false unless @default_sampler.respond_to?(:update)
85
+
91
86
  @default_sampler.update(*args)
92
87
  end
93
88
 
data/lib/ddtrace/span.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'time'
4
- require 'thread'
5
-
6
4
  require 'ddtrace/utils'
7
5
  require 'ddtrace/ext/errors'
8
6
  require 'ddtrace/ext/priority'
@@ -38,14 +36,16 @@ module Datadog
38
36
  EXTERNAL_MAX_ID = 1 << 64
39
37
 
40
38
  # This limit is for numeric tags because uint64 could end up rounded.
41
- NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53)
39
+ NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53).freeze
42
40
 
43
41
  attr_accessor :name, :service, :resource, :span_type,
44
42
  :span_id, :trace_id, :parent_id,
45
43
  :status, :sampled,
46
- :tracer, :context, :duration, :start_time, :end_time
44
+ :tracer, :context
45
+
46
+ attr_reader :parent, :start_time, :end_time
47
47
 
48
- attr_reader :parent
48
+ attr_writer :duration
49
49
 
50
50
  # Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
51
51
  # and then <tt>finish()</tt> once the tracer operation is over.
@@ -180,7 +180,7 @@ module Datadog
180
180
  # behavior and so we maintain it for backward compatibility for those
181
181
  # who are using async manual instrumentation that may rely on this
182
182
 
183
- @start_time = start_time || Time.now.utc
183
+ @start_time = start_time || Utils::Time.now.utc
184
184
  @duration_start = start_time.nil? ? duration_marker : nil
185
185
 
186
186
  self
@@ -206,7 +206,7 @@ module Datadog
206
206
 
207
207
  @allocation_count_finish = now_allocations
208
208
 
209
- now = Time.now.utc
209
+ now = Utils::Time.now.utc
210
210
 
211
211
  # Provide a default start_time if unset.
212
212
  # Using `now` here causes duration to be 0; this is expected
@@ -1,11 +1,18 @@
1
1
  require 'ddtrace/ext/net'
2
2
  require 'ddtrace/runtime/socket'
3
3
  require 'ddtrace/runtime/metrics'
4
+ require 'ddtrace/utils/only_once'
4
5
 
5
6
  module Datadog
6
7
  # SyncWriter flushes both services and traces synchronously
7
8
  # DEV: To be replaced by Datadog::Workers::TraceWriter.
9
+ #
10
+ # Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
11
+ # the separate `datadog-lambda` uses it as of February 2021:
12
+ # <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
8
13
  class SyncWriter
14
+ DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
15
+
9
16
  attr_reader \
10
17
  :priority_sampler,
11
18
  :transport
@@ -13,7 +20,8 @@ module Datadog
13
20
  def initialize(options = {})
14
21
  @transport = options.fetch(:transport) do
15
22
  transport_options = options.fetch(:transport_options, {})
16
- Transport::HTTP.default(transport_options)
23
+ transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
24
+ Transport::HTTP.default(**transport_options)
17
25
  end
18
26
 
19
27
  @priority_sampler = options.fetch(:priority_sampler, nil)
@@ -21,17 +29,15 @@ module Datadog
21
29
 
22
30
  def write(trace, services = nil)
23
31
  unless services.nil?
24
- Datadog::Patcher.do_once('SyncWriter#write') do
32
+ DEPRECATION_WARN_ONLY_ONCE.run do
25
33
  Datadog.logger.warn(%(
26
34
  write: Writing services has been deprecated and no longer need to be provided.
27
- write(traces, services) can be updted to write(traces)
35
+ write(traces, services) can be updated to write(traces)
28
36
  ))
29
37
  end
30
38
  end
31
39
 
32
- perform_concurrently(
33
- proc { flush_trace(trace) }
34
- )
40
+ flush_trace(trace)
35
41
  rescue => e
36
42
  Datadog.logger.debug(e)
37
43
  end
@@ -44,13 +50,10 @@ module Datadog
44
50
 
45
51
  private
46
52
 
47
- def perform_concurrently(*tasks)
48
- tasks.map { |task| Thread.new(&task) }.each(&:join)
49
- end
50
-
51
53
  def flush_trace(trace)
52
54
  processed_traces = Pipeline.process!([trace])
53
55
  return if processed_traces.empty?
56
+
54
57
  inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
55
58
  transport.send_traces(processed_traces)
56
59
  end
@@ -58,9 +61,7 @@ module Datadog
58
61
  def inject_hostname!(trace)
59
62
  unless trace.first.nil?
60
63
  hostname = Datadog::Runtime::Socket.hostname
61
- unless hostname.nil? || hostname.empty?
62
- trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
63
- end
64
+ trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
64
65
  end
65
66
  end
66
67
  end
@@ -0,0 +1,48 @@
1
+ module Datadog
2
+ module Tasks
3
+ # Wraps command with Datadog tracing
4
+ class Exec
5
+ attr_reader :args
6
+
7
+ def initialize(args)
8
+ @args = args
9
+ end
10
+
11
+ def run
12
+ set_rubyopt!
13
+ exec_with_error_handling(args)
14
+ end
15
+
16
+ def rubyopts
17
+ [
18
+ '-rddtrace/profiling/preload'
19
+ ]
20
+ end
21
+
22
+ private
23
+
24
+ def set_rubyopt!
25
+ if ENV.key?('RUBYOPT')
26
+ ENV['RUBYOPT'] += " #{rubyopts.join(' ')}"
27
+ else
28
+ ENV['RUBYOPT'] = rubyopts.join(' ')
29
+ end
30
+ end
31
+
32
+ # If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
33
+ # follow the same status codes as the shell uses
34
+ # See also:
35
+ # * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
36
+ # * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
37
+ def exec_with_error_handling(args)
38
+ Kernel.exec(*args)
39
+ rescue Errno::ENOENT => e
40
+ Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
41
+ Kernel.exit 127
42
+ rescue Errno::EACCES, Errno::ENOEXEC => e
43
+ Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
44
+ Kernel.exit 126
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,14 @@
1
+ module Datadog
2
+ module Tasks
3
+ # Prints help message for usage of `ddtrace`
4
+ class Help
5
+ def run
6
+ puts %(
7
+ Usage: ddtrace [command] [arguments]
8
+ exec [command]: Executes command with tracing & profiling preloaded.
9
+ help: Prints this help message.
10
+ )
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,4 +1,3 @@
1
- require 'thread'
2
1
  require 'logger'
3
2
  require 'pathname'
4
3
 
@@ -11,6 +10,8 @@ require 'ddtrace/runtime/identity'
11
10
  require 'ddtrace/sampler'
12
11
  require 'ddtrace/sampling'
13
12
  require 'ddtrace/correlation'
13
+ require 'ddtrace/event'
14
+ require 'ddtrace/utils/only_once'
14
15
 
15
16
  # \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
16
17
  module Datadog
@@ -20,6 +21,9 @@ module Datadog
20
21
  # of these function calls and sub-requests would be encapsulated within a single trace.
21
22
  # rubocop:disable Metrics/ClassLength
22
23
  class Tracer
24
+ SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
25
+ SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
26
+
23
27
  attr_reader :sampler, :tags, :provider, :context_flush
24
28
  attr_accessor :enabled, :writer
25
29
  attr_writer :default_service
@@ -28,8 +32,7 @@ module Datadog
28
32
  DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
29
33
 
30
34
  def services
31
- # Only log each deprecation warning once (safeguard against log spam)
32
- Datadog::Patcher.do_once('Tracer#set_service_info') do
35
+ SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
33
36
  Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
34
37
  end
35
38
 
@@ -71,7 +74,9 @@ module Datadog
71
74
  # by default.
72
75
  def initialize(options = {})
73
76
  # Configurable options
74
- @context_flush = if options[:partial_flush]
77
+ @context_flush = if options[:context_flush]
78
+ options[:context_flush]
79
+ elsif options[:partial_flush]
75
80
  Datadog::ContextFlush::Partial.new(options)
76
81
  else
77
82
  Datadog::ContextFlush::Finished.new
@@ -82,7 +87,7 @@ module Datadog
82
87
  @provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
83
88
  @sampler = options.fetch(:sampler, Datadog::AllSampler.new)
84
89
  @tags = options.fetch(:tags, {})
85
- @writer = options.fetch(:writer, Datadog::Writer.new)
90
+ @writer = options.fetch(:writer) { Datadog::Writer.new }
86
91
 
87
92
  # Instance variables
88
93
  @mutex = Mutex.new
@@ -115,8 +120,10 @@ module Datadog
115
120
 
116
121
  configure_writer(options)
117
122
 
118
- if options.key?(:partial_flush)
119
- @context_flush = if options[:partial_flush]
123
+ if options.key?(:context_flush) || options.key?(:partial_flush)
124
+ @context_flush = if options[:context_flush]
125
+ options[:context_flush]
126
+ elsif options[:partial_flush]
120
127
  Datadog::ContextFlush::Partial.new(options)
121
128
  else
122
129
  Datadog::ContextFlush::Finished.new
@@ -130,8 +137,7 @@ module Datadog
130
137
  #
131
138
  # set_service_info is deprecated, no service information needs to be tracked
132
139
  def set_service_info(service, app, app_type)
133
- # Only log each deprecation warning once (safeguard against log spam)
134
- Datadog::Patcher.do_once('Tracer#set_service_info') do
140
+ SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
135
141
  Datadog.logger.warn(%(
136
142
  set_service_info: Usage of set_service_info has been deprecated,
137
143
  service information no longer needs to be reported to the trace agent.
@@ -144,6 +150,7 @@ module Datadog
144
150
  # a service would be invalid and rejected.
145
151
  def default_service
146
152
  return @default_service if instance_variable_defined?(:@default_service) && @default_service
153
+
147
154
  begin
148
155
  @default_service = File.basename($PROGRAM_NAME, '.*')
149
156
  rescue StandardError => e
@@ -159,7 +166,7 @@ module Datadog
159
166
  #
160
167
  # tracer.set_tags('env' => 'prod', 'component' => 'core')
161
168
  def set_tags(tags)
162
- string_tags = Hash[tags.collect { |k, v| [k.to_s, v] }]
169
+ string_tags = tags.collect { |k, v| [k.to_s, v] }.to_h
163
170
  @tags = @tags.merge(string_tags)
164
171
  end
165
172
 
@@ -313,6 +320,10 @@ module Datadog
313
320
  end
314
321
  end
315
322
 
323
+ def trace_completed
324
+ @trace_completed ||= TraceCompleted.new
325
+ end
326
+
316
327
  # Record the given +context+. For compatibility with previous versions,
317
328
  # +context+ can also be a span. It is similar to the +child_of+ argument,
318
329
  # method will figure out what to do, submitting a +span+ for recording
@@ -364,24 +375,34 @@ module Datadog
364
375
  end
365
376
 
366
377
  @writer.write(trace)
378
+ trace_completed.publish(trace)
379
+ end
380
+
381
+ # Triggered whenever a trace is completed
382
+ class TraceCompleted < Datadog::Event
383
+ def initialize
384
+ super(:trace_completed)
385
+ end
386
+
387
+ # NOTE: Ignore Rubocop rule. This definition allows for
388
+ # description of and constraints on arguments.
389
+ # rubocop:disable Lint/UselessMethodDefinition
390
+ def publish(trace)
391
+ super(trace)
392
+ end
393
+ # rubocop:enable Lint/UselessMethodDefinition
367
394
  end
368
395
 
369
396
  # TODO: Move this kind of configuration building out of the tracer.
370
397
  # Tracer should not have this kind of knowledge of writer.
371
- # rubocop:disable Metrics/PerceivedComplexity
372
- # rubocop:disable Metrics/CyclomaticComplexity
373
- # rubocop:disable Metrics/MethodLength
374
398
  def configure_writer(options = {})
375
- hostname = options.fetch(:hostname, nil)
376
- port = options.fetch(:port, nil)
377
399
  sampler = options.fetch(:sampler, nil)
378
400
  priority_sampling = options.fetch(:priority_sampling, nil)
379
401
  writer = options.fetch(:writer, nil)
380
- transport_options = options.fetch(:transport_options, {}).dup
402
+ agent_settings = options.fetch(:agent_settings, nil)
381
403
 
382
404
  # Compile writer options
383
405
  writer_options = options.fetch(:writer_options, {}).dup
384
- rebuild_writer = !writer_options.empty?
385
406
 
386
407
  # Re-build the sampler and writer if priority sampling is enabled,
387
408
  # but neither are configured. Verify the sampler isn't already a
@@ -394,35 +415,20 @@ module Datadog
394
415
  end
395
416
  elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
396
417
  writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
397
- rebuild_writer = true
398
418
  elsif priority_sampling == false
399
419
  deactivate_priority_sampling!(sampler)
400
- rebuild_writer = true
401
420
  elsif @sampler.is_a?(PrioritySampler)
402
421
  # Make sure to add sampler to options if transport is rebuilt.
403
422
  writer_options[:priority_sampler] = @sampler
404
423
  end
405
424
 
406
- # Apply options to transport
407
- if transport_options.is_a?(Proc)
408
- transport_options = { on_build: transport_options }
409
- rebuild_writer = true
410
- end
411
-
412
- if hostname || port
413
- transport_options[:hostname] = hostname unless hostname.nil?
414
- transport_options[:port] = port unless port.nil?
415
- rebuild_writer = true
416
- end
425
+ writer_options[:agent_settings] = agent_settings if agent_settings
417
426
 
418
- writer_options[:transport_options] = transport_options
427
+ # Make sure old writer is shut down before throwing away.
428
+ # Don't want additional threads running...
429
+ @writer.stop unless writer.nil?
419
430
 
420
- if rebuild_writer || writer
421
- # Make sure old writer is shut down before throwing away.
422
- # Don't want additional threads running...
423
- @writer.stop unless writer.nil?
424
- @writer = writer || Writer.new(writer_options)
425
- end
431
+ @writer = writer || Writer.new(writer_options)
426
432
  end
427
433
 
428
434
  def activate_priority_sampling!(base_sampler = nil)