ddtrace 0.44.0 → 0.49.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 (774) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +392 -17
  3. data/.circleci/images/primary/Dockerfile-2.0.0 +11 -1
  4. data/.circleci/images/primary/Dockerfile-2.1.10 +11 -1
  5. data/.circleci/images/primary/Dockerfile-2.2.10 +11 -1
  6. data/.circleci/images/primary/Dockerfile-2.3.8 +10 -0
  7. data/.circleci/images/primary/Dockerfile-2.4.6 +10 -0
  8. data/.circleci/images/primary/Dockerfile-2.5.6 +10 -0
  9. data/.circleci/images/primary/Dockerfile-2.6.4 +10 -0
  10. data/.circleci/images/primary/Dockerfile-2.7.0 +10 -0
  11. data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +88 -0
  12. data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2.0.0} +1 -5
  13. data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
  14. data/.dockerignore +0 -1
  15. data/.github/workflows/create-next-milestone.yml +2 -2
  16. data/.gitignore +2 -1
  17. data/.gitlab-ci.yml +18 -18
  18. data/.rubocop.yml +281 -7
  19. data/.rubocop_todo.yml +438 -0
  20. data/.simplecov +6 -0
  21. data/Appraisals +97 -9
  22. data/CHANGELOG.md +270 -1
  23. data/Gemfile +63 -3
  24. data/LICENSE-3rdparty.csv +2 -0
  25. data/README.md +1 -0
  26. data/Rakefile +75 -25
  27. data/benchmarks/profiler_sample_loop.rb +69 -0
  28. data/bin/ddtracerb +15 -0
  29. data/ddtrace.gemspec +10 -37
  30. data/docker-compose.yml +69 -25
  31. data/docs/DevelopmentGuide.md +28 -0
  32. data/docs/GettingStarted.md +163 -69
  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.0.0_contrib_old.gemfile +64 -0
  123. data/gemfiles/ruby_2.0.0_contrib_old.gemfile.lock +290 -0
  124. data/gemfiles/ruby_2.0.0_core_old.gemfile +33 -0
  125. data/gemfiles/ruby_2.0.0_core_old.gemfile.lock +118 -0
  126. data/gemfiles/ruby_2.0.0_rails30_postgres.gemfile +39 -0
  127. data/gemfiles/ruby_2.0.0_rails30_postgres.gemfile.lock +196 -0
  128. data/gemfiles/ruby_2.0.0_rails30_postgres_sidekiq.gemfile +40 -0
  129. data/gemfiles/ruby_2.0.0_rails30_postgres_sidekiq.gemfile.lock +205 -0
  130. data/gemfiles/ruby_2.0.0_rails32_mysql2.gemfile +43 -0
  131. data/gemfiles/ruby_2.0.0_rails32_mysql2.gemfile.lock +217 -0
  132. data/gemfiles/ruby_2.0.0_rails32_postgres.gemfile +39 -0
  133. data/gemfiles/ruby_2.0.0_rails32_postgres.gemfile.lock +204 -0
  134. data/gemfiles/ruby_2.0.0_rails32_postgres_redis.gemfile +41 -0
  135. data/gemfiles/ruby_2.0.0_rails32_postgres_redis.gemfile.lock +223 -0
  136. data/gemfiles/ruby_2.0.0_rails32_postgres_sidekiq.gemfile +40 -0
  137. data/gemfiles/ruby_2.0.0_rails32_postgres_sidekiq.gemfile.lock +213 -0
  138. data/gemfiles/ruby_2.1.10_contrib_old.gemfile +66 -0
  139. data/gemfiles/ruby_2.1.10_contrib_old.gemfile.lock +305 -0
  140. data/gemfiles/ruby_2.1.10_core_old.gemfile +33 -0
  141. data/gemfiles/ruby_2.1.10_core_old.gemfile.lock +118 -0
  142. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile +39 -0
  143. data/gemfiles/ruby_2.1.10_rails30_postgres.gemfile.lock +196 -0
  144. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile +40 -0
  145. data/gemfiles/ruby_2.1.10_rails30_postgres_sidekiq.gemfile.lock +205 -0
  146. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile +42 -0
  147. data/gemfiles/ruby_2.1.10_rails32_mysql2.gemfile.lock +215 -0
  148. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile +39 -0
  149. data/gemfiles/ruby_2.1.10_rails32_postgres.gemfile.lock +204 -0
  150. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile +41 -0
  151. data/gemfiles/ruby_2.1.10_rails32_postgres_redis.gemfile.lock +223 -0
  152. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile +40 -0
  153. data/gemfiles/ruby_2.1.10_rails32_postgres_sidekiq.gemfile.lock +213 -0
  154. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile +38 -0
  155. data/gemfiles/ruby_2.1.10_rails4_mysql2.gemfile.lock +218 -0
  156. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile +38 -0
  157. data/gemfiles/ruby_2.1.10_rails4_postgres.gemfile.lock +218 -0
  158. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile +40 -0
  159. data/gemfiles/ruby_2.1.10_rails4_postgres_redis.gemfile.lock +237 -0
  160. data/gemfiles/ruby_2.2.10_contrib.gemfile +73 -0
  161. data/gemfiles/ruby_2.2.10_contrib.gemfile.lock +1450 -0
  162. data/gemfiles/ruby_2.2.10_core_old.gemfile +33 -0
  163. data/gemfiles/ruby_2.2.10_core_old.gemfile.lock +118 -0
  164. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile +39 -0
  165. data/gemfiles/ruby_2.2.10_rails30_postgres.gemfile.lock +196 -0
  166. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile +40 -0
  167. data/gemfiles/ruby_2.2.10_rails30_postgres_sidekiq.gemfile.lock +205 -0
  168. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile +41 -0
  169. data/gemfiles/ruby_2.2.10_rails32_mysql2.gemfile.lock +212 -0
  170. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile +39 -0
  171. data/gemfiles/ruby_2.2.10_rails32_postgres.gemfile.lock +204 -0
  172. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile +41 -0
  173. data/gemfiles/ruby_2.2.10_rails32_postgres_redis.gemfile.lock +223 -0
  174. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile +40 -0
  175. data/gemfiles/ruby_2.2.10_rails32_postgres_sidekiq.gemfile.lock +213 -0
  176. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile +38 -0
  177. data/gemfiles/ruby_2.2.10_rails4_mysql2.gemfile.lock +218 -0
  178. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile +38 -0
  179. data/gemfiles/ruby_2.2.10_rails4_postgres.gemfile.lock +218 -0
  180. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile +40 -0
  181. data/gemfiles/ruby_2.2.10_rails4_postgres_redis.gemfile.lock +237 -0
  182. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile +40 -0
  183. data/gemfiles/ruby_2.2.10_rails4_postgres_sidekiq.gemfile.lock +229 -0
  184. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile +38 -0
  185. data/gemfiles/ruby_2.2.10_rails5_mysql2.gemfile.lock +234 -0
  186. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile +38 -0
  187. data/gemfiles/ruby_2.2.10_rails5_postgres.gemfile.lock +234 -0
  188. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile +39 -0
  189. data/gemfiles/ruby_2.2.10_rails5_postgres_redis.gemfile.lock +236 -0
  190. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile +39 -0
  191. data/gemfiles/ruby_2.2.10_rails5_postgres_redis_activesupport.gemfile.lock +236 -0
  192. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile +40 -0
  193. data/gemfiles/ruby_2.2.10_rails5_postgres_sidekiq.gemfile.lock +245 -0
  194. data/gemfiles/ruby_2.3.8_contrib.gemfile +73 -0
  195. data/gemfiles/ruby_2.3.8_contrib.gemfile.lock +1459 -0
  196. data/gemfiles/ruby_2.3.8_contrib_old.gemfile +34 -0
  197. data/gemfiles/ruby_2.3.8_contrib_old.gemfile.lock +127 -0
  198. data/gemfiles/ruby_2.3.8_core_old.gemfile +33 -0
  199. data/gemfiles/ruby_2.3.8_core_old.gemfile.lock +123 -0
  200. data/gemfiles/ruby_2.3.8_cucumber3.gemfile +34 -0
  201. data/gemfiles/ruby_2.3.8_cucumber3.gemfile.lock +144 -0
  202. data/gemfiles/ruby_2.3.8_cucumber4.gemfile +34 -0
  203. data/gemfiles/ruby_2.3.8_cucumber4.gemfile.lock +174 -0
  204. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile +39 -0
  205. data/gemfiles/ruby_2.3.8_rails30_postgres.gemfile.lock +201 -0
  206. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile +40 -0
  207. data/gemfiles/ruby_2.3.8_rails30_postgres_sidekiq.gemfile.lock +210 -0
  208. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile +41 -0
  209. data/gemfiles/ruby_2.3.8_rails32_mysql2.gemfile.lock +217 -0
  210. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile +39 -0
  211. data/gemfiles/ruby_2.3.8_rails32_postgres.gemfile.lock +209 -0
  212. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile +41 -0
  213. data/gemfiles/ruby_2.3.8_rails32_postgres_redis.gemfile.lock +228 -0
  214. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile +40 -0
  215. data/gemfiles/ruby_2.3.8_rails32_postgres_sidekiq.gemfile.lock +218 -0
  216. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile +38 -0
  217. data/gemfiles/ruby_2.3.8_rails4_mysql2.gemfile.lock +223 -0
  218. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile +38 -0
  219. data/gemfiles/ruby_2.3.8_rails4_postgres.gemfile.lock +223 -0
  220. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile +40 -0
  221. data/gemfiles/ruby_2.3.8_rails4_postgres_redis.gemfile.lock +242 -0
  222. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile +40 -0
  223. data/gemfiles/ruby_2.3.8_rails4_postgres_sidekiq.gemfile.lock +234 -0
  224. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile +37 -0
  225. data/gemfiles/ruby_2.3.8_rails5_mysql2.gemfile.lock +234 -0
  226. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile +37 -0
  227. data/gemfiles/ruby_2.3.8_rails5_postgres.gemfile.lock +234 -0
  228. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile +38 -0
  229. data/gemfiles/ruby_2.3.8_rails5_postgres_redis.gemfile.lock +236 -0
  230. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile +38 -0
  231. data/gemfiles/ruby_2.3.8_rails5_postgres_redis_activesupport.gemfile.lock +236 -0
  232. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile +39 -0
  233. data/gemfiles/ruby_2.3.8_rails5_postgres_sidekiq.gemfile.lock +245 -0
  234. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile +35 -0
  235. data/gemfiles/ruby_2.3.8_resque2_redis3.gemfile.lock +150 -0
  236. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile +35 -0
  237. data/gemfiles/ruby_2.3.8_resque2_redis4.gemfile.lock +150 -0
  238. data/gemfiles/ruby_2.4.6_contrib.gemfile +78 -0
  239. data/gemfiles/ruby_2.4.6_contrib.gemfile.lock +1513 -0
  240. data/gemfiles/ruby_2.4.6_contrib_old.gemfile +38 -0
  241. data/gemfiles/ruby_2.4.6_contrib_old.gemfile.lock +155 -0
  242. data/gemfiles/ruby_2.4.6_core_old.gemfile +37 -0
  243. data/gemfiles/ruby_2.4.6_core_old.gemfile.lock +151 -0
  244. data/gemfiles/ruby_2.4.6_cucumber3.gemfile +38 -0
  245. data/gemfiles/ruby_2.4.6_cucumber3.gemfile.lock +172 -0
  246. data/gemfiles/ruby_2.4.6_cucumber4.gemfile +38 -0
  247. data/gemfiles/ruby_2.4.6_cucumber4.gemfile.lock +202 -0
  248. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile +41 -0
  249. data/gemfiles/ruby_2.4.6_rails5_mysql2.gemfile.lock +262 -0
  250. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile +41 -0
  251. data/gemfiles/ruby_2.4.6_rails5_postgres.gemfile.lock +262 -0
  252. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile +42 -0
  253. data/gemfiles/ruby_2.4.6_rails5_postgres_redis.gemfile.lock +264 -0
  254. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile +42 -0
  255. data/gemfiles/ruby_2.4.6_rails5_postgres_redis_activesupport.gemfile.lock +264 -0
  256. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile +43 -0
  257. data/gemfiles/ruby_2.4.6_rails5_postgres_sidekiq.gemfile.lock +273 -0
  258. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile +39 -0
  259. data/gemfiles/ruby_2.4.6_resque2_redis3.gemfile.lock +178 -0
  260. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile +39 -0
  261. data/gemfiles/ruby_2.4.6_resque2_redis4.gemfile.lock +178 -0
  262. data/gemfiles/ruby_2.5.6_contrib.gemfile +83 -0
  263. data/gemfiles/ruby_2.5.6_contrib.gemfile.lock +1526 -0
  264. data/gemfiles/ruby_2.5.6_contrib_old.gemfile +39 -0
  265. data/gemfiles/ruby_2.5.6_contrib_old.gemfile.lock +165 -0
  266. data/gemfiles/ruby_2.5.6_core_old.gemfile +38 -0
  267. data/gemfiles/ruby_2.5.6_core_old.gemfile.lock +161 -0
  268. data/gemfiles/ruby_2.5.6_cucumber3.gemfile +39 -0
  269. data/gemfiles/ruby_2.5.6_cucumber3.gemfile.lock +182 -0
  270. data/gemfiles/ruby_2.5.6_cucumber4.gemfile +39 -0
  271. data/gemfiles/ruby_2.5.6_cucumber4.gemfile.lock +214 -0
  272. data/gemfiles/ruby_2.5.6_cucumber5.gemfile +39 -0
  273. data/gemfiles/ruby_2.5.6_cucumber5.gemfile.lock +214 -0
  274. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile +44 -0
  275. data/gemfiles/ruby_2.5.6_rails5_mysql2.gemfile.lock +276 -0
  276. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile +44 -0
  277. data/gemfiles/ruby_2.5.6_rails5_postgres.gemfile.lock +276 -0
  278. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile +45 -0
  279. data/gemfiles/ruby_2.5.6_rails5_postgres_redis.gemfile.lock +278 -0
  280. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile +45 -0
  281. data/gemfiles/ruby_2.5.6_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  282. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile +46 -0
  283. data/gemfiles/ruby_2.5.6_rails5_postgres_sidekiq.gemfile.lock +284 -0
  284. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile +44 -0
  285. data/gemfiles/ruby_2.5.6_rails61_mysql2.gemfile.lock +295 -0
  286. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile +44 -0
  287. data/gemfiles/ruby_2.5.6_rails61_postgres.gemfile.lock +295 -0
  288. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile +45 -0
  289. data/gemfiles/ruby_2.5.6_rails61_postgres_redis.gemfile.lock +297 -0
  290. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile +45 -0
  291. data/gemfiles/ruby_2.5.6_rails61_postgres_sidekiq.gemfile.lock +302 -0
  292. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile +44 -0
  293. data/gemfiles/ruby_2.5.6_rails6_mysql2.gemfile.lock +292 -0
  294. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile +44 -0
  295. data/gemfiles/ruby_2.5.6_rails6_postgres.gemfile.lock +292 -0
  296. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile +45 -0
  297. data/gemfiles/ruby_2.5.6_rails6_postgres_redis.gemfile.lock +294 -0
  298. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile +45 -0
  299. data/gemfiles/ruby_2.5.6_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  300. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile +46 -0
  301. data/gemfiles/ruby_2.5.6_rails6_postgres_sidekiq.gemfile.lock +300 -0
  302. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile +40 -0
  303. data/gemfiles/ruby_2.5.6_resque2_redis3.gemfile.lock +188 -0
  304. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile +40 -0
  305. data/gemfiles/ruby_2.5.6_resque2_redis4.gemfile.lock +188 -0
  306. data/gemfiles/ruby_2.6.4_contrib.gemfile +79 -0
  307. data/gemfiles/ruby_2.6.4_contrib.gemfile.lock +1524 -0
  308. data/gemfiles/ruby_2.6.4_contrib_old.gemfile +39 -0
  309. data/gemfiles/ruby_2.6.4_contrib_old.gemfile.lock +167 -0
  310. data/gemfiles/ruby_2.6.4_core_old.gemfile +38 -0
  311. data/gemfiles/ruby_2.6.4_core_old.gemfile.lock +163 -0
  312. data/gemfiles/ruby_2.6.4_cucumber3.gemfile +39 -0
  313. data/gemfiles/ruby_2.6.4_cucumber3.gemfile.lock +184 -0
  314. data/gemfiles/ruby_2.6.4_cucumber4.gemfile +39 -0
  315. data/gemfiles/ruby_2.6.4_cucumber4.gemfile.lock +216 -0
  316. data/gemfiles/ruby_2.6.4_cucumber5.gemfile +39 -0
  317. data/gemfiles/ruby_2.6.4_cucumber5.gemfile.lock +216 -0
  318. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile +42 -0
  319. data/gemfiles/ruby_2.6.4_rails5_mysql2.gemfile.lock +276 -0
  320. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile +42 -0
  321. data/gemfiles/ruby_2.6.4_rails5_postgres.gemfile.lock +276 -0
  322. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile +43 -0
  323. data/gemfiles/ruby_2.6.4_rails5_postgres_redis.gemfile.lock +278 -0
  324. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile +43 -0
  325. data/gemfiles/ruby_2.6.4_rails5_postgres_redis_activesupport.gemfile.lock +278 -0
  326. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile +44 -0
  327. data/gemfiles/ruby_2.6.4_rails5_postgres_sidekiq.gemfile.lock +284 -0
  328. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile +42 -0
  329. data/gemfiles/ruby_2.6.4_rails61_mysql2.gemfile.lock +295 -0
  330. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile +42 -0
  331. data/gemfiles/ruby_2.6.4_rails61_postgres.gemfile.lock +295 -0
  332. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile +43 -0
  333. data/gemfiles/ruby_2.6.4_rails61_postgres_redis.gemfile.lock +297 -0
  334. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile +43 -0
  335. data/gemfiles/ruby_2.6.4_rails61_postgres_sidekiq.gemfile.lock +302 -0
  336. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile +42 -0
  337. data/gemfiles/ruby_2.6.4_rails6_mysql2.gemfile.lock +292 -0
  338. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile +42 -0
  339. data/gemfiles/ruby_2.6.4_rails6_postgres.gemfile.lock +292 -0
  340. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile +43 -0
  341. data/gemfiles/ruby_2.6.4_rails6_postgres_redis.gemfile.lock +294 -0
  342. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile +43 -0
  343. data/gemfiles/ruby_2.6.4_rails6_postgres_redis_activesupport.gemfile.lock +294 -0
  344. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile +44 -0
  345. data/gemfiles/ruby_2.6.4_rails6_postgres_sidekiq.gemfile.lock +300 -0
  346. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile +40 -0
  347. data/gemfiles/ruby_2.6.4_resque2_redis3.gemfile.lock +190 -0
  348. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile +40 -0
  349. data/gemfiles/ruby_2.6.4_resque2_redis4.gemfile.lock +190 -0
  350. data/gemfiles/ruby_2.7.0_contrib.gemfile +78 -0
  351. data/gemfiles/ruby_2.7.0_contrib.gemfile.lock +1523 -0
  352. data/gemfiles/ruby_2.7.0_contrib_old.gemfile +39 -0
  353. data/gemfiles/ruby_2.7.0_contrib_old.gemfile.lock +167 -0
  354. data/gemfiles/ruby_2.7.0_core_old.gemfile +38 -0
  355. data/gemfiles/ruby_2.7.0_core_old.gemfile.lock +163 -0
  356. data/gemfiles/ruby_2.7.0_cucumber3.gemfile +39 -0
  357. data/gemfiles/ruby_2.7.0_cucumber3.gemfile.lock +184 -0
  358. data/gemfiles/ruby_2.7.0_cucumber4.gemfile +39 -0
  359. data/gemfiles/ruby_2.7.0_cucumber4.gemfile.lock +216 -0
  360. data/gemfiles/ruby_2.7.0_cucumber5.gemfile +39 -0
  361. data/gemfiles/ruby_2.7.0_cucumber5.gemfile.lock +216 -0
  362. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile +42 -0
  363. data/gemfiles/ruby_2.7.0_rails5_mysql2.gemfile.lock +276 -0
  364. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile +42 -0
  365. data/gemfiles/ruby_2.7.0_rails5_postgres.gemfile.lock +276 -0
  366. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile +44 -0
  367. data/gemfiles/ruby_2.7.0_rails5_postgres_redis.gemfile.lock +295 -0
  368. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile +44 -0
  369. data/gemfiles/ruby_2.7.0_rails5_postgres_redis_activesupport.gemfile.lock +295 -0
  370. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile +44 -0
  371. data/gemfiles/ruby_2.7.0_rails5_postgres_sidekiq.gemfile.lock +284 -0
  372. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile +42 -0
  373. data/gemfiles/ruby_2.7.0_rails61_mysql2.gemfile.lock +295 -0
  374. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile +42 -0
  375. data/gemfiles/ruby_2.7.0_rails61_postgres.gemfile.lock +295 -0
  376. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile +43 -0
  377. data/gemfiles/ruby_2.7.0_rails61_postgres_redis.gemfile.lock +297 -0
  378. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile +43 -0
  379. data/gemfiles/ruby_2.7.0_rails61_postgres_sidekiq.gemfile.lock +302 -0
  380. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile +42 -0
  381. data/gemfiles/ruby_2.7.0_rails6_mysql2.gemfile.lock +292 -0
  382. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile +42 -0
  383. data/gemfiles/ruby_2.7.0_rails6_postgres.gemfile.lock +292 -0
  384. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile +44 -0
  385. data/gemfiles/ruby_2.7.0_rails6_postgres_redis.gemfile.lock +311 -0
  386. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile +44 -0
  387. data/gemfiles/ruby_2.7.0_rails6_postgres_redis_activesupport.gemfile.lock +311 -0
  388. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile +44 -0
  389. data/gemfiles/ruby_2.7.0_rails6_postgres_sidekiq.gemfile.lock +300 -0
  390. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile +40 -0
  391. data/gemfiles/ruby_2.7.0_resque2_redis3.gemfile.lock +190 -0
  392. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile +40 -0
  393. data/gemfiles/ruby_2.7.0_resque2_redis4.gemfile.lock +190 -0
  394. data/gemfiles/ruby_3.0.0_contrib.gemfile +77 -0
  395. data/gemfiles/ruby_3.0.0_contrib.gemfile.lock +1534 -0
  396. data/gemfiles/ruby_3.0.0_core_old.gemfile +39 -0
  397. data/gemfiles/ruby_3.0.0_core_old.gemfile.lock +165 -0
  398. data/gemfiles/ruby_3.0.0_cucumber3.gemfile +40 -0
  399. data/gemfiles/ruby_3.0.0_cucumber3.gemfile.lock +186 -0
  400. data/gemfiles/ruby_3.0.0_cucumber4.gemfile +40 -0
  401. data/gemfiles/ruby_3.0.0_cucumber4.gemfile.lock +218 -0
  402. data/gemfiles/ruby_3.0.0_cucumber5.gemfile +40 -0
  403. data/gemfiles/ruby_3.0.0_cucumber5.gemfile.lock +218 -0
  404. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile +43 -0
  405. data/gemfiles/ruby_3.0.0_rails61_mysql2.gemfile.lock +295 -0
  406. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile +43 -0
  407. data/gemfiles/ruby_3.0.0_rails61_postgres.gemfile.lock +295 -0
  408. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile +44 -0
  409. data/gemfiles/ruby_3.0.0_rails61_postgres_redis.gemfile.lock +297 -0
  410. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile +44 -0
  411. data/gemfiles/ruby_3.0.0_rails61_postgres_sidekiq.gemfile.lock +302 -0
  412. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile +41 -0
  413. data/gemfiles/ruby_3.0.0_resque2_redis3.gemfile.lock +192 -0
  414. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile +41 -0
  415. data/gemfiles/ruby_3.0.0_resque2_redis4.gemfile.lock +192 -0
  416. data/integration/README.md +67 -0
  417. data/integration/apps/rack/.dockerignore +1 -0
  418. data/integration/apps/rack/.envrc.sample +1 -0
  419. data/integration/apps/rack/.gitignore +4 -0
  420. data/integration/apps/rack/.rspec +1 -0
  421. data/integration/apps/rack/Dockerfile +28 -0
  422. data/integration/apps/rack/Dockerfile-ci +11 -0
  423. data/integration/apps/rack/Gemfile +24 -0
  424. data/integration/apps/rack/README.md +93 -0
  425. data/integration/apps/rack/app/acme.rb +80 -0
  426. data/integration/apps/rack/app/datadog.rb +17 -0
  427. data/integration/apps/rack/bin/run +22 -0
  428. data/integration/apps/rack/bin/setup +17 -0
  429. data/integration/apps/rack/bin/test +24 -0
  430. data/integration/apps/rack/config.ru +6 -0
  431. data/integration/apps/rack/config/puma.rb +14 -0
  432. data/integration/apps/rack/config/unicorn.rb +23 -0
  433. data/integration/apps/rack/docker-compose.ci.yml +62 -0
  434. data/integration/apps/rack/docker-compose.yml +78 -0
  435. data/integration/apps/rack/script/build-images +38 -0
  436. data/integration/apps/rack/script/ci +50 -0
  437. data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
  438. data/integration/apps/rack/spec/spec_helper.rb +16 -0
  439. data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
  440. data/integration/apps/rails-five/.dockerignore +1 -0
  441. data/integration/apps/rails-five/.env +3 -0
  442. data/integration/apps/rails-five/.envrc.sample +1 -0
  443. data/integration/apps/rails-five/.gitignore +30 -0
  444. data/integration/apps/rails-five/Dockerfile +25 -0
  445. data/integration/apps/rails-five/Dockerfile-ci +11 -0
  446. data/integration/apps/rails-five/Gemfile +104 -0
  447. data/integration/apps/rails-five/README.md +94 -0
  448. data/integration/apps/rails-five/Rakefile +6 -0
  449. data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
  450. data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
  451. data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
  452. data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
  453. data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
  454. data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
  455. data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
  456. data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
  457. data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
  458. data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
  459. data/integration/apps/rails-five/app/models/application_record.rb +3 -0
  460. data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
  461. data/integration/apps/rails-five/app/models/test.rb +2 -0
  462. data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
  463. data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
  464. data/integration/apps/rails-five/bin/bundle +3 -0
  465. data/integration/apps/rails-five/bin/rails +9 -0
  466. data/integration/apps/rails-five/bin/rake +9 -0
  467. data/integration/apps/rails-five/bin/run +24 -0
  468. data/integration/apps/rails-five/bin/setup +27 -0
  469. data/integration/apps/rails-five/bin/spring +17 -0
  470. data/integration/apps/rails-five/bin/test +21 -0
  471. data/integration/apps/rails-five/bin/update +28 -0
  472. data/integration/apps/rails-five/config.ru +5 -0
  473. data/integration/apps/rails-five/config/application.rb +97 -0
  474. data/integration/apps/rails-five/config/boot.rb +4 -0
  475. data/integration/apps/rails-five/config/cable.yml +10 -0
  476. data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
  477. data/integration/apps/rails-five/config/database.yml +28 -0
  478. data/integration/apps/rails-five/config/environment.rb +5 -0
  479. data/integration/apps/rails-five/config/environments/development.rb +51 -0
  480. data/integration/apps/rails-five/config/environments/production.rb +82 -0
  481. data/integration/apps/rails-five/config/environments/test.rb +43 -0
  482. data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
  483. data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
  484. data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
  485. data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
  486. data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
  487. data/integration/apps/rails-five/config/locales/en.yml +33 -0
  488. data/integration/apps/rails-five/config/puma.rb +24 -0
  489. data/integration/apps/rails-five/config/routes.rb +11 -0
  490. data/integration/apps/rails-five/config/spring.rb +6 -0
  491. data/integration/apps/rails-five/config/unicorn.rb +29 -0
  492. data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
  493. data/integration/apps/rails-five/db/schema.rb +23 -0
  494. data/integration/apps/rails-five/db/seeds.rb +7 -0
  495. data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
  496. data/integration/apps/rails-five/docker-compose.yml +100 -0
  497. data/integration/apps/rails-five/lib/tasks/.keep +0 -0
  498. data/integration/apps/rails-five/log/.keep +0 -0
  499. data/integration/apps/rails-five/public/robots.txt +1 -0
  500. data/integration/apps/rails-five/script/build-images +35 -0
  501. data/integration/apps/rails-five/script/ci +50 -0
  502. data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
  503. data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
  504. data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
  505. data/integration/apps/rails-five/storage/.keep +0 -0
  506. data/integration/apps/rails-five/tmp/.keep +0 -0
  507. data/integration/apps/rails-five/vendor/.keep +0 -0
  508. data/integration/apps/ruby/.dockerignore +1 -0
  509. data/integration/apps/ruby/.envrc.sample +1 -0
  510. data/integration/apps/ruby/.gitignore +2 -0
  511. data/integration/apps/ruby/Dockerfile +25 -0
  512. data/integration/apps/ruby/Dockerfile-ci +11 -0
  513. data/integration/apps/ruby/Gemfile +11 -0
  514. data/integration/apps/ruby/README.md +70 -0
  515. data/integration/apps/ruby/agent.yaml +3 -0
  516. data/integration/apps/ruby/app/datadog.rb +13 -0
  517. data/integration/apps/ruby/app/fibonacci.rb +58 -0
  518. data/integration/apps/ruby/bin/run +20 -0
  519. data/integration/apps/ruby/bin/setup +17 -0
  520. data/integration/apps/ruby/bin/test +21 -0
  521. data/integration/apps/ruby/docker-compose.ci.yml +51 -0
  522. data/integration/apps/ruby/docker-compose.yml +63 -0
  523. data/integration/apps/ruby/script/build-images +38 -0
  524. data/integration/apps/ruby/script/ci +50 -0
  525. data/integration/images/agent/Dockerfile +2 -0
  526. data/integration/images/agent/agent.yaml +3 -0
  527. data/integration/images/include/datadog/analyzer.rb +71 -0
  528. data/integration/images/include/datadog/demo_env.rb +101 -0
  529. data/integration/images/include/http-health-check +33 -0
  530. data/integration/images/ruby/2.0/Dockerfile +54 -0
  531. data/integration/images/ruby/2.1/Dockerfile +54 -0
  532. data/integration/images/ruby/2.2/Dockerfile +54 -0
  533. data/integration/images/ruby/2.3/Dockerfile +70 -0
  534. data/integration/images/ruby/2.4/Dockerfile +54 -0
  535. data/integration/images/ruby/2.5/Dockerfile +54 -0
  536. data/integration/images/ruby/2.6/Dockerfile +54 -0
  537. data/integration/images/ruby/2.7/Dockerfile +54 -0
  538. data/integration/images/ruby/3.0/Dockerfile +54 -0
  539. data/integration/images/wrk/Dockerfile +33 -0
  540. data/integration/images/wrk/scripts/entrypoint.sh +17 -0
  541. data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
  542. data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
  543. data/integration/script/build-images +43 -0
  544. data/lib/ddtrace.rb +8 -5
  545. data/lib/ddtrace/analytics.rb +2 -0
  546. data/lib/ddtrace/auto_instrument.rb +3 -0
  547. data/lib/ddtrace/auto_instrument_base.rb +6 -0
  548. data/lib/ddtrace/buffer.rb +4 -4
  549. data/lib/ddtrace/configuration.rb +121 -26
  550. data/lib/ddtrace/configuration/agent_settings_resolver.rb +241 -0
  551. data/lib/ddtrace/configuration/base.rb +1 -1
  552. data/lib/ddtrace/configuration/components.rb +86 -11
  553. data/lib/ddtrace/configuration/option_definition.rb +1 -3
  554. data/lib/ddtrace/configuration/options.rb +4 -7
  555. data/lib/ddtrace/configuration/settings.rb +61 -6
  556. data/lib/ddtrace/context.rb +5 -6
  557. data/lib/ddtrace/context_provider.rb +0 -1
  558. data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
  559. data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
  560. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +2 -4
  561. data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
  562. data/lib/ddtrace/contrib/action_pack/utils.rb +1 -1
  563. data/lib/ddtrace/contrib/action_view/event.rb +1 -1
  564. data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
  565. data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
  566. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +30 -0
  567. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +107 -18
  568. data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
  569. data/lib/ddtrace/contrib/active_record/utils.rb +57 -20
  570. data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
  571. data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -1
  572. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
  573. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
  574. data/lib/ddtrace/contrib/auto_instrument.rb +48 -0
  575. data/lib/ddtrace/contrib/aws/patcher.rb +1 -0
  576. data/lib/ddtrace/contrib/aws/services.rb +2 -0
  577. data/lib/ddtrace/contrib/configurable.rb +63 -39
  578. data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
  579. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -20
  580. data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
  581. data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -10
  582. data/lib/ddtrace/contrib/cucumber/ext.rb +0 -2
  583. data/lib/ddtrace/contrib/cucumber/formatter.rb +5 -11
  584. data/lib/ddtrace/contrib/cucumber/integration.rb +5 -0
  585. data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
  586. data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -1
  587. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
  588. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
  589. data/lib/ddtrace/contrib/ethon/easy_patch.rb +10 -9
  590. data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
  591. data/lib/ddtrace/contrib/extensions.rb +53 -3
  592. data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
  593. data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
  594. data/lib/ddtrace/contrib/grape/endpoint.rb +8 -15
  595. data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
  596. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
  597. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
  598. data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
  599. data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
  600. data/lib/ddtrace/contrib/http/instrumentation.rb +5 -5
  601. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
  602. data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
  603. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
  604. data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
  605. data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
  606. data/lib/ddtrace/contrib/httprb/instrumentation.rb +14 -20
  607. data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
  608. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
  609. data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
  610. data/lib/ddtrace/contrib/patchable.rb +18 -7
  611. data/lib/ddtrace/contrib/patcher.rb +9 -6
  612. data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
  613. data/lib/ddtrace/contrib/qless/qless_job.rb +1 -0
  614. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
  615. data/lib/ddtrace/contrib/que/ext.rb +19 -19
  616. data/lib/ddtrace/contrib/que/tracer.rb +1 -1
  617. data/lib/ddtrace/contrib/racecar/event.rb +1 -0
  618. data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
  619. data/lib/ddtrace/contrib/rack/integration.rb +7 -0
  620. data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
  621. data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
  622. data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
  623. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  624. data/lib/ddtrace/contrib/rails/patcher.rb +6 -2
  625. data/lib/ddtrace/contrib/rails/utils.rb +4 -0
  626. data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
  627. data/lib/ddtrace/contrib/rake/integration.rb +1 -1
  628. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +11 -4
  629. data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
  630. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  631. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
  632. data/lib/ddtrace/contrib/registry.rb +2 -2
  633. data/lib/ddtrace/contrib/resque/configuration/settings.rb +17 -1
  634. data/lib/ddtrace/contrib/resque/integration.rb +1 -1
  635. data/lib/ddtrace/contrib/resque/patcher.rb +4 -4
  636. data/lib/ddtrace/contrib/resque/resque_job.rb +24 -1
  637. data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
  638. data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -10
  639. data/lib/ddtrace/contrib/rspec/example.rb +24 -10
  640. data/lib/ddtrace/contrib/rspec/ext.rb +0 -3
  641. data/lib/ddtrace/contrib/rspec/integration.rb +6 -1
  642. data/lib/ddtrace/contrib/rspec/patcher.rb +0 -2
  643. data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
  644. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
  645. data/lib/ddtrace/contrib/shoryuken/tracer.rb +7 -4
  646. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -7
  647. data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
  648. data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
  649. data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
  650. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
  651. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +3 -3
  652. data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
  653. data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
  654. data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
  655. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +4 -0
  656. data/lib/ddtrace/correlation.rb +1 -0
  657. data/lib/ddtrace/diagnostics/environment_logger.rb +3 -2
  658. data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
  659. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
  660. data/lib/ddtrace/error.rb +86 -8
  661. data/lib/ddtrace/ext/ci.rb +43 -10
  662. data/lib/ddtrace/ext/distributed.rb +1 -1
  663. data/lib/ddtrace/ext/git.rb +0 -1
  664. data/lib/ddtrace/ext/http.rb +1 -1
  665. data/lib/ddtrace/ext/profiling.rb +53 -0
  666. data/lib/ddtrace/ext/runtime.rb +3 -1
  667. data/lib/ddtrace/ext/transport.rb +2 -0
  668. data/lib/ddtrace/forced_tracing.rb +2 -0
  669. data/lib/ddtrace/logger.rb +1 -1
  670. data/lib/ddtrace/metrics.rb +14 -6
  671. data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
  672. data/lib/ddtrace/opentracer/span.rb +2 -6
  673. data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
  674. data/lib/ddtrace/patcher.rb +25 -4
  675. data/lib/ddtrace/pin.rb +8 -61
  676. data/lib/ddtrace/pipeline/span_filter.rb +1 -1
  677. data/lib/ddtrace/profiling.rb +105 -0
  678. data/lib/ddtrace/profiling/backtrace_location.rb +32 -0
  679. data/lib/ddtrace/profiling/buffer.rb +41 -0
  680. data/lib/ddtrace/profiling/collectors/stack.rb +259 -0
  681. data/lib/ddtrace/profiling/encoding/profile.rb +31 -0
  682. data/lib/ddtrace/profiling/event.rb +13 -0
  683. data/lib/ddtrace/profiling/events/stack.rb +102 -0
  684. data/lib/ddtrace/profiling/exporter.rb +23 -0
  685. data/lib/ddtrace/profiling/ext/cpu.rb +52 -0
  686. data/lib/ddtrace/profiling/ext/cthread.rb +157 -0
  687. data/lib/ddtrace/profiling/ext/forking.rb +97 -0
  688. data/lib/ddtrace/profiling/flush.rb +41 -0
  689. data/lib/ddtrace/profiling/pprof/builder.rb +121 -0
  690. data/lib/ddtrace/profiling/pprof/converter.rb +85 -0
  691. data/lib/ddtrace/profiling/pprof/message_set.rb +12 -0
  692. data/lib/ddtrace/profiling/pprof/payload.rb +18 -0
  693. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  694. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +81 -0
  695. data/lib/ddtrace/profiling/pprof/stack_sample.rb +90 -0
  696. data/lib/ddtrace/profiling/pprof/string_table.rb +10 -0
  697. data/lib/ddtrace/profiling/pprof/template.rb +114 -0
  698. data/lib/ddtrace/profiling/preload.rb +3 -0
  699. data/lib/ddtrace/profiling/profiler.rb +30 -0
  700. data/lib/ddtrace/profiling/recorder.rb +95 -0
  701. data/lib/ddtrace/profiling/scheduler.rb +105 -0
  702. data/lib/ddtrace/profiling/tasks/setup.rb +77 -0
  703. data/lib/ddtrace/profiling/transport/client.rb +12 -0
  704. data/lib/ddtrace/profiling/transport/http.rb +118 -0
  705. data/lib/ddtrace/profiling/transport/http/api.rb +43 -0
  706. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +91 -0
  707. data/lib/ddtrace/profiling/transport/http/api/instance.rb +36 -0
  708. data/lib/ddtrace/profiling/transport/http/api/spec.rb +40 -0
  709. data/lib/ddtrace/profiling/transport/http/builder.rb +28 -0
  710. data/lib/ddtrace/profiling/transport/http/client.rb +33 -0
  711. data/lib/ddtrace/profiling/transport/http/response.rb +21 -0
  712. data/lib/ddtrace/profiling/transport/io.rb +30 -0
  713. data/lib/ddtrace/profiling/transport/io/client.rb +27 -0
  714. data/lib/ddtrace/profiling/transport/io/response.rb +16 -0
  715. data/lib/ddtrace/profiling/transport/parcel.rb +17 -0
  716. data/lib/ddtrace/profiling/transport/request.rb +15 -0
  717. data/lib/ddtrace/profiling/transport/response.rb +8 -0
  718. data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
  719. data/lib/ddtrace/propagation/http_propagator.rb +17 -2
  720. data/lib/ddtrace/quantization/http.rb +1 -0
  721. data/lib/ddtrace/runtime/cgroup.rb +2 -2
  722. data/lib/ddtrace/runtime/container.rb +43 -29
  723. data/lib/ddtrace/runtime/identity.rb +8 -0
  724. data/lib/ddtrace/sampler.rb +1 -1
  725. data/lib/ddtrace/sampling/rule_sampler.rb +4 -9
  726. data/lib/ddtrace/span.rb +7 -7
  727. data/lib/ddtrace/sync_writer.rb +12 -12
  728. data/lib/ddtrace/tasks/exec.rb +48 -0
  729. data/lib/ddtrace/tasks/help.rb +14 -0
  730. data/lib/ddtrace/tracer.rb +35 -33
  731. data/lib/ddtrace/transport/http.rb +41 -31
  732. data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
  733. data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
  734. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  735. data/lib/ddtrace/transport/http/builder.rb +7 -1
  736. data/lib/ddtrace/transport/http/env.rb +8 -0
  737. data/lib/ddtrace/transport/http/traces.rb +2 -3
  738. data/lib/ddtrace/transport/io.rb +1 -1
  739. data/lib/ddtrace/transport/io/client.rb +15 -8
  740. data/lib/ddtrace/transport/io/response.rb +1 -3
  741. data/lib/ddtrace/transport/io/traces.rb +6 -0
  742. data/lib/ddtrace/transport/parcel.rb +4 -0
  743. data/lib/ddtrace/transport/traces.rb +18 -1
  744. data/lib/ddtrace/utils/compression.rb +27 -0
  745. data/lib/ddtrace/utils/object_set.rb +41 -0
  746. data/lib/ddtrace/utils/only_once.rb +40 -0
  747. data/lib/ddtrace/utils/sequence.rb +17 -0
  748. data/lib/ddtrace/utils/string_table.rb +45 -0
  749. data/lib/ddtrace/utils/time.rb +32 -1
  750. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  751. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  752. data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
  753. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
  754. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
  755. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
  756. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
  757. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
  758. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
  759. data/lib/ddtrace/version.rb +15 -1
  760. data/lib/ddtrace/workers.rb +5 -0
  761. data/lib/ddtrace/workers/async.rb +11 -3
  762. data/lib/ddtrace/workers/loop.rb +30 -4
  763. data/lib/ddtrace/workers/polling.rb +1 -0
  764. data/lib/ddtrace/workers/queue.rb +1 -0
  765. data/lib/ddtrace/workers/runtime_metrics.rb +14 -1
  766. data/lib/ddtrace/workers/trace_writer.rb +11 -14
  767. data/lib/ddtrace/writer.rb +11 -5
  768. metadata +604 -383
  769. data/lib/ddtrace/augmentation.rb +0 -13
  770. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  771. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  772. data/lib/ddtrace/augmentation/shim.rb +0 -102
  773. data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
  774. data/lib/ddtrace/monkey.rb +0 -58
@@ -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
 
@@ -82,7 +85,7 @@ module Datadog
82
85
  @provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
83
86
  @sampler = options.fetch(:sampler, Datadog::AllSampler.new)
84
87
  @tags = options.fetch(:tags, {})
85
- @writer = options.fetch(:writer, Datadog::Writer.new)
88
+ @writer = options.fetch(:writer) { Datadog::Writer.new }
86
89
 
87
90
  # Instance variables
88
91
  @mutex = Mutex.new
@@ -130,8 +133,7 @@ module Datadog
130
133
  #
131
134
  # set_service_info is deprecated, no service information needs to be tracked
132
135
  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
136
+ SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
135
137
  Datadog.logger.warn(%(
136
138
  set_service_info: Usage of set_service_info has been deprecated,
137
139
  service information no longer needs to be reported to the trace agent.
@@ -144,6 +146,7 @@ module Datadog
144
146
  # a service would be invalid and rejected.
145
147
  def default_service
146
148
  return @default_service if instance_variable_defined?(:@default_service) && @default_service
149
+
147
150
  begin
148
151
  @default_service = File.basename($PROGRAM_NAME, '.*')
149
152
  rescue StandardError => e
@@ -313,6 +316,10 @@ module Datadog
313
316
  end
314
317
  end
315
318
 
319
+ def trace_completed
320
+ @trace_completed ||= TraceCompleted.new
321
+ end
322
+
316
323
  # Record the given +context+. For compatibility with previous versions,
317
324
  # +context+ can also be a span. It is similar to the +child_of+ argument,
318
325
  # method will figure out what to do, submitting a +span+ for recording
@@ -364,24 +371,34 @@ module Datadog
364
371
  end
365
372
 
366
373
  @writer.write(trace)
374
+ trace_completed.publish(trace)
375
+ end
376
+
377
+ # Triggered whenever a trace is completed
378
+ class TraceCompleted < Datadog::Event
379
+ def initialize
380
+ super(:trace_completed)
381
+ end
382
+
383
+ # NOTE: Ignore Rubocop rule. This definition allows for
384
+ # description of and constraints on arguments.
385
+ # rubocop:disable Lint/UselessMethodDefinition
386
+ def publish(trace)
387
+ super(trace)
388
+ end
389
+ # rubocop:enable Lint/UselessMethodDefinition
367
390
  end
368
391
 
369
392
  # TODO: Move this kind of configuration building out of the tracer.
370
393
  # 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
394
  def configure_writer(options = {})
375
- hostname = options.fetch(:hostname, nil)
376
- port = options.fetch(:port, nil)
377
395
  sampler = options.fetch(:sampler, nil)
378
396
  priority_sampling = options.fetch(:priority_sampling, nil)
379
397
  writer = options.fetch(:writer, nil)
380
- transport_options = options.fetch(:transport_options, {}).dup
398
+ agent_settings = options.fetch(:agent_settings, nil)
381
399
 
382
400
  # Compile writer options
383
401
  writer_options = options.fetch(:writer_options, {}).dup
384
- rebuild_writer = !writer_options.empty?
385
402
 
386
403
  # Re-build the sampler and writer if priority sampling is enabled,
387
404
  # but neither are configured. Verify the sampler isn't already a
@@ -394,35 +411,20 @@ module Datadog
394
411
  end
395
412
  elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
396
413
  writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
397
- rebuild_writer = true
398
414
  elsif priority_sampling == false
399
415
  deactivate_priority_sampling!(sampler)
400
- rebuild_writer = true
401
416
  elsif @sampler.is_a?(PrioritySampler)
402
417
  # Make sure to add sampler to options if transport is rebuilt.
403
418
  writer_options[:priority_sampler] = @sampler
404
419
  end
405
420
 
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
421
+ writer_options[:agent_settings] = agent_settings if agent_settings
417
422
 
418
- writer_options[:transport_options] = transport_options
423
+ # Make sure old writer is shut down before throwing away.
424
+ # Don't want additional threads running...
425
+ @writer.stop unless writer.nil?
419
426
 
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
427
+ @writer = writer || Writer.new(writer_options)
426
428
  end
427
429
 
428
430
  def activate_priority_sampling!(base_sampler = nil)
@@ -25,11 +25,23 @@ module Datadog
25
25
 
26
26
  # Builds a new Transport::HTTP::Client with default settings
27
27
  # Pass a block to override any settings.
28
- def default(options = {})
28
+ def default(agent_settings: Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS, **options)
29
29
  new do |transport|
30
- transport.adapter :net_http, default_hostname, default_port
30
+ transport.adapter(
31
+ default_adapter,
32
+ agent_settings.hostname,
33
+ agent_settings.port,
34
+ timeout: agent_settings.timeout_seconds,
35
+ ssl: agent_settings.ssl
36
+ )
31
37
  transport.headers default_headers
32
38
 
39
+ if agent_settings.deprecated_for_removal_transport_configuration_options
40
+ # The deprecated_for_removal_transport_configuration_options take precedence over any options the caller
41
+ # specifies
42
+ options = options.merge(**agent_settings.deprecated_for_removal_transport_configuration_options)
43
+ end
44
+
33
45
  apis = API.defaults
34
46
 
35
47
  transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
@@ -38,24 +50,15 @@ module Datadog
38
50
 
39
51
  # Apply any settings given by options
40
52
  unless options.empty?
41
- # Change hostname/port
42
- if options.key?(:hostname) || options.key?(:port)
43
- hostname = options.fetch(:hostname, default_hostname)
44
- port = options.fetch(:port, default_port)
45
- transport.adapter :net_http, hostname, port
46
- end
47
-
48
- # Change default API
49
53
  transport.default_api = options[:api_version] if options.key?(:api_version)
50
-
51
- # Add headers
52
54
  transport.headers options[:headers] if options.key?(:headers)
55
+ end
53
56
 
54
- # Execute on_build callback
55
- options[:on_build].call(transport) if options[:on_build].is_a?(Proc)
57
+ if agent_settings.deprecated_for_removal_transport_configuration_proc
58
+ agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
56
59
  end
57
60
 
58
- # Call block to apply any customization, if provided.
61
+ # Call block to apply any customization, if provided
59
62
  yield(transport) if block_given?
60
63
  end
61
64
  end
@@ -69,32 +72,39 @@ module Datadog
69
72
  }.tap do |headers|
70
73
  # Add container ID, if present.
71
74
  container_id = Datadog::Runtime::Container.container_id
72
- unless container_id.nil?
73
- headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id
74
- end
75
+ headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
75
76
  end
76
77
  end
77
78
 
78
- def default_hostname
79
- return default_url.hostname if default_url
80
-
81
- ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_HOST, Datadog::Ext::Transport::HTTP::DEFAULT_HOST)
79
+ def default_adapter
80
+ :net_http
82
81
  end
83
82
 
84
- def default_port
85
- return default_url.port if default_url
83
+ def default_hostname(logger: Datadog.logger)
84
+ logger.warn(
85
+ 'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
86
+ 'be removed on a future ddtrace release.'
87
+ )
86
88
 
87
- ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT, Datadog::Ext::Transport::HTTP::DEFAULT_PORT).to_i
89
+ Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS.hostname
88
90
  end
89
91
 
90
- def default_url
91
- url_env = ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL, nil)
92
+ def default_port(logger: Datadog.logger)
93
+ logger.warn(
94
+ 'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
95
+ 'be removed on a future ddtrace release.'
96
+ )
97
+
98
+ Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS.port
99
+ end
92
100
 
93
- if url_env
94
- uri_parsed = URI.parse(url_env)
101
+ def default_url(logger: Datadog.logger)
102
+ logger.warn(
103
+ 'Deprecated for removal: Using #default_url for configuration is deprecated and will ' \
104
+ 'be removed on a future ddtrace release.'
105
+ )
95
106
 
96
- uri_parsed if %w[http https].include?(uri_parsed.scheme)
97
- end
107
+ nil
98
108
  end
99
109
 
100
110
  # Add adapters to registry
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/transport/response'
2
+ require 'ddtrace/vendor/multipart-post/net/http/post/multipart'
2
3
 
3
4
  module Datadog
4
5
  module Transport
@@ -9,27 +10,28 @@ module Datadog
9
10
  attr_reader \
10
11
  :hostname,
11
12
  :port,
12
- :timeout
13
+ :timeout,
14
+ :ssl
13
15
 
14
- DEFAULT_TIMEOUT = 1
16
+ DEFAULT_TIMEOUT = 30
15
17
 
16
18
  def initialize(hostname, port, options = {})
17
19
  @hostname = hostname
18
20
  @port = port
19
21
  @timeout = options[:timeout] || DEFAULT_TIMEOUT
22
+ @ssl = options.key?(:ssl) ? options[:ssl] == true : false
20
23
  end
21
24
 
22
- def open
25
+ def open(&block)
23
26
  # DEV Initializing +Net::HTTP+ directly help us avoid expensive
24
27
  # options processing done in +Net::HTTP.start+:
25
28
  # https://github.com/ruby/ruby/blob/b2d96abb42abbe2e01f010ffc9ac51f0f9a50002/lib/net/http.rb#L614-L618
26
29
  req = ::Net::HTTP.new(hostname, port, nil)
27
30
 
31
+ req.use_ssl = ssl
28
32
  req.open_timeout = req.read_timeout = timeout
29
33
 
30
- req.start do |http|
31
- yield(http)
32
- end
34
+ req.start(&block)
33
35
  end
34
36
 
35
37
  def call(env)
@@ -41,8 +43,18 @@ module Datadog
41
43
  end
42
44
 
43
45
  def post(env)
44
- post = ::Net::HTTP::Post.new(env.path, env.headers)
45
- post.body = env.body
46
+ post = nil
47
+
48
+ if env.form.nil? || env.form.empty?
49
+ post = ::Net::HTTP::Post.new(env.path, env.headers)
50
+ post.body = env.body
51
+ else
52
+ post = ::Datadog::Vendor::Net::HTTP::Post::Multipart.new(
53
+ env.path,
54
+ env.form,
55
+ env.headers
56
+ )
57
+ end
46
58
 
47
59
  # Connect and send the request
48
60
  http_response = open do |http|
@@ -82,36 +94,43 @@ module Datadog
82
94
 
83
95
  def payload
84
96
  return super if http_response.nil?
97
+
85
98
  http_response.body
86
99
  end
87
100
 
88
101
  def code
89
102
  return super if http_response.nil?
103
+
90
104
  http_response.code.to_i
91
105
  end
92
106
 
93
107
  def ok?
94
108
  return super if http_response.nil?
109
+
95
110
  code.between?(200, 299)
96
111
  end
97
112
 
98
113
  def unsupported?
99
114
  return super if http_response.nil?
115
+
100
116
  code == 415
101
117
  end
102
118
 
103
119
  def not_found?
104
120
  return super if http_response.nil?
121
+
105
122
  code == 404
106
123
  end
107
124
 
108
125
  def client_error?
109
126
  return super if http_response.nil?
127
+
110
128
  code.between?(400, 499)
111
129
  end
112
130
 
113
131
  def server_error?
114
132
  return super if http_response.nil?
133
+
115
134
  code.between?(500, 599)
116
135
  end
117
136
 
@@ -15,6 +15,7 @@ module Datadog
15
15
  def set(klass, name = nil)
16
16
  name ||= klass.to_s
17
17
  return if name.nil?
18
+
18
19
  @adapters[name] = klass
19
20
  end
20
21
  end
@@ -18,7 +18,7 @@ module Datadog
18
18
  @timeout = options.fetch(:timeout, DEFAULT_TIMEOUT)
19
19
  end
20
20
 
21
- def open
21
+ def open(&block)
22
22
  # Open connection
23
23
  connection = HTTP.new(
24
24
  filepath,
@@ -26,9 +26,7 @@ module Datadog
26
26
  continue_timeout: timeout
27
27
  )
28
28
 
29
- connection.start do |http|
30
- yield(http)
31
- end
29
+ connection.start(&block)
32
30
  end
33
31
 
34
32
  def url
@@ -36,6 +36,7 @@ module Datadog
36
36
  @default_adapter = if type.is_a?(Symbol)
37
37
  registry_klass = REGISTRY.get(type)
38
38
  raise UnknownAdapterError, type if registry_klass.nil?
39
+
39
40
  registry_klass.new(*args)
40
41
  else
41
42
  type
@@ -67,6 +68,7 @@ module Datadog
67
68
 
68
69
  def default_api=(key)
69
70
  raise UnknownApiError, key unless @apis.key?(key)
71
+
70
72
  @default_api = key
71
73
  end
72
74
 
@@ -93,7 +95,7 @@ module Datadog
93
95
  api_options[:headers] = @default_headers.merge((api_options[:headers] || {}))
94
96
 
95
97
  # Add API::Instance with all settings
96
- instances[key] = API::Instance.new(
98
+ instances[key] = api_instance_class.new(
97
99
  spec,
98
100
  adapter,
99
101
  api_options
@@ -105,6 +107,10 @@ module Datadog
105
107
  end
106
108
  end
107
109
 
110
+ def api_instance_class
111
+ API::Instance
112
+ end
113
+
108
114
  # Raised when the API key does not match known APIs.
109
115
  class UnknownApiError < StandardError
110
116
  attr_reader :key
@@ -42,6 +42,14 @@ module Datadog
42
42
  def headers=(value)
43
43
  self[:headers] = value
44
44
  end
45
+
46
+ def form
47
+ self[:form] ||= {}
48
+ end
49
+
50
+ def form=(value)
51
+ self[:form] = value
52
+ end
45
53
  end
46
54
  end
47
55
  end