ddtrace 0.42.0 → 0.54.2

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 (602) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +22 -0
  3. data/.gitignore +7 -1
  4. data/CHANGELOG.md +1645 -370
  5. data/CONTRIBUTING.md +2 -6
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +21 -39
  10. data/docs/DevelopmentGuide.md +46 -8
  11. data/docs/GettingStarted.md +439 -92
  12. data/docs/ProfilingDevelopment.md +107 -0
  13. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +86 -0
  14. data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
  15. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +52 -0
  16. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
  17. data/ext/ddtrace_profiling_native_extension/extconf.rb +197 -0
  18. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +35 -0
  19. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
  20. data/ext/ddtrace_profiling_native_extension/profiling.c +22 -0
  21. data/lib/datadog/ci/configuration/components.rb +31 -0
  22. data/lib/datadog/ci/configuration/settings.rb +37 -0
  23. data/lib/datadog/ci/context_flush.rb +29 -0
  24. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
  25. data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
  26. data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -0
  27. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
  28. data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
  29. data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
  30. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
  31. data/lib/datadog/ci/contrib/rspec/example.rb +75 -0
  32. data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
  33. data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
  34. data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
  35. data/lib/datadog/ci/ext/app_types.rb +10 -0
  36. data/lib/datadog/ci/ext/environment.rb +485 -0
  37. data/lib/datadog/ci/ext/settings.rb +11 -0
  38. data/lib/datadog/ci/ext/test.rb +36 -0
  39. data/lib/datadog/ci/extensions.rb +18 -0
  40. data/lib/datadog/ci/test.rb +81 -0
  41. data/lib/datadog/ci.rb +17 -0
  42. data/lib/datadog/contrib.rb +71 -0
  43. data/lib/datadog/core/environment/cgroup.rb +52 -0
  44. data/lib/datadog/core/environment/class_count.rb +20 -0
  45. data/lib/datadog/core/environment/container.rb +91 -0
  46. data/lib/datadog/core/environment/ext.rb +27 -0
  47. data/lib/datadog/core/environment/gc.rb +19 -0
  48. data/lib/datadog/core/environment/identity.rb +51 -0
  49. data/lib/datadog/core/environment/socket.rb +17 -0
  50. data/lib/datadog/core/environment/thread_count.rb +19 -0
  51. data/lib/datadog/core/environment/variable_helpers.rb +42 -0
  52. data/lib/datadog/core/environment/vm_cache.rb +46 -0
  53. data/lib/ddtrace/analytics.rb +3 -0
  54. data/lib/ddtrace/auto_instrument.rb +5 -0
  55. data/lib/ddtrace/auto_instrument_base.rb +7 -0
  56. data/lib/ddtrace/buffer.rb +38 -24
  57. data/lib/ddtrace/chunker.rb +1 -0
  58. data/lib/ddtrace/configuration/agent_settings_resolver.rb +309 -0
  59. data/lib/ddtrace/configuration/base.rb +9 -11
  60. data/lib/ddtrace/configuration/components.rb +167 -26
  61. data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
  62. data/lib/ddtrace/configuration/option.rb +1 -0
  63. data/lib/ddtrace/configuration/option_definition.rb +2 -3
  64. data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
  65. data/lib/ddtrace/configuration/option_set.rb +1 -0
  66. data/lib/ddtrace/configuration/options.rb +7 -9
  67. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  68. data/lib/ddtrace/configuration/settings.rb +142 -12
  69. data/lib/ddtrace/configuration.rb +132 -24
  70. data/lib/ddtrace/context.rb +51 -22
  71. data/lib/ddtrace/context_flush.rb +15 -2
  72. data/lib/ddtrace/context_provider.rb +13 -2
  73. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
  74. data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
  75. data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
  76. data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
  77. data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
  78. data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
  79. data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
  80. data/lib/ddtrace/contrib/action_cable/instrumentation.rb +47 -0
  81. data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
  82. data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
  83. data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
  84. data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
  85. data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
  86. data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
  87. data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
  88. data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
  89. data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
  90. data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -0
  91. data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
  92. data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
  93. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
  94. data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
  95. data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
  96. data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
  97. data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
  98. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
  99. data/lib/ddtrace/contrib/action_view/event.rb +4 -7
  100. data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
  101. data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
  102. data/lib/ddtrace/contrib/action_view/events.rb +1 -0
  103. data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
  104. data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
  105. data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
  106. data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
  107. data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
  108. data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
  109. data/lib/ddtrace/contrib/active_job/configuration/settings.rb +33 -0
  110. data/lib/ddtrace/contrib/active_job/event.rb +54 -0
  111. data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
  112. data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
  113. data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
  114. data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
  115. data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
  116. data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
  117. data/lib/ddtrace/contrib/active_job/events.rb +39 -0
  118. data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
  119. data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
  120. data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
  121. data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
  122. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
  123. data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
  124. data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
  125. data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
  126. data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
  127. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
  128. data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
  129. data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
  130. data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
  131. data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
  132. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
  133. data/lib/ddtrace/contrib/active_record/event.rb +3 -2
  134. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
  135. data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
  136. data/lib/ddtrace/contrib/active_record/events.rb +1 -0
  137. data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
  138. data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
  139. data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
  140. data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
  141. data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
  142. data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
  143. data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
  144. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
  145. data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
  146. data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
  147. data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
  148. data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
  149. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
  150. data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
  151. data/lib/ddtrace/contrib/analytics.rb +1 -0
  152. data/lib/ddtrace/contrib/auto_instrument.rb +48 -0
  153. data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
  154. data/lib/ddtrace/contrib/aws/ext.rb +1 -0
  155. data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
  156. data/lib/ddtrace/contrib/aws/integration.rb +1 -0
  157. data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
  158. data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
  159. data/lib/ddtrace/contrib/aws/services.rb +4 -0
  160. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
  161. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
  162. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  163. data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
  164. data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
  165. data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
  166. data/lib/ddtrace/contrib/configurable.rb +65 -38
  167. data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
  168. data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
  169. data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
  170. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
  171. data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
  172. data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
  173. data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
  174. data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
  175. data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
  176. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
  177. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
  178. data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
  179. data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
  180. data/lib/ddtrace/contrib/delayed_job/plugin.rb +5 -3
  181. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
  182. data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
  183. data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
  184. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
  185. data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
  186. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
  187. data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
  188. data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
  189. data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
  190. data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
  191. data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
  192. data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
  193. data/lib/ddtrace/contrib/excon/ext.rb +1 -0
  194. data/lib/ddtrace/contrib/excon/integration.rb +1 -0
  195. data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
  196. data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
  197. data/lib/ddtrace/contrib/extensions.rb +90 -14
  198. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
  199. data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
  200. data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
  201. data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
  202. data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
  203. data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
  204. data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
  205. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  206. data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
  207. data/lib/ddtrace/contrib/grape/ext.rb +2 -0
  208. data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
  209. data/lib/ddtrace/contrib/grape/integration.rb +1 -0
  210. data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
  211. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
  212. data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
  213. data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
  214. data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
  215. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
  216. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
  217. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
  218. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
  219. data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
  220. data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
  221. data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
  222. data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
  223. data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
  224. data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
  225. data/lib/ddtrace/contrib/http/ext.rb +1 -0
  226. data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
  227. data/lib/ddtrace/contrib/http/integration.rb +1 -0
  228. data/lib/ddtrace/contrib/http/patcher.rb +2 -1
  229. data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
  230. data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
  231. data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
  232. data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
  233. data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
  234. data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
  235. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
  236. data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
  237. data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
  238. data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
  239. data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
  240. data/lib/ddtrace/contrib/integration.rb +4 -3
  241. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
  242. data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
  243. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
  244. data/lib/ddtrace/contrib/kafka/event.rb +4 -3
  245. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
  246. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
  247. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
  248. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
  249. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
  250. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
  251. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
  252. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
  253. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
  254. data/lib/ddtrace/contrib/kafka/events.rb +1 -0
  255. data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
  256. data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
  257. data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
  258. data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
  259. data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
  260. data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
  261. data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
  262. data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
  263. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
  264. data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
  265. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +6 -3
  266. data/lib/ddtrace/contrib/mongodb/integration.rb +6 -0
  267. data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
  268. data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
  269. data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
  270. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
  271. data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
  272. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
  273. data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
  274. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
  275. data/lib/ddtrace/contrib/patchable.rb +21 -9
  276. data/lib/ddtrace/contrib/patcher.rb +12 -8
  277. data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
  278. data/lib/ddtrace/contrib/presto/ext.rb +1 -0
  279. data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
  280. data/lib/ddtrace/contrib/presto/integration.rb +1 -0
  281. data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
  282. data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
  283. data/lib/ddtrace/contrib/qless/ext.rb +21 -0
  284. data/lib/ddtrace/contrib/qless/integration.rb +39 -0
  285. data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
  286. data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
  287. data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
  288. data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
  289. data/lib/ddtrace/contrib/que/ext.rb +20 -19
  290. data/lib/ddtrace/contrib/que/integration.rb +1 -0
  291. data/lib/ddtrace/contrib/que/patcher.rb +1 -0
  292. data/lib/ddtrace/contrib/que/tracer.rb +4 -2
  293. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
  294. data/lib/ddtrace/contrib/racecar/event.rb +4 -2
  295. data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
  296. data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
  297. data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
  298. data/lib/ddtrace/contrib/racecar/events.rb +1 -0
  299. data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
  300. data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
  301. data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
  302. data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
  303. data/lib/ddtrace/contrib/rack/ext.rb +1 -0
  304. data/lib/ddtrace/contrib/rack/integration.rb +8 -0
  305. data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
  306. data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
  307. data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
  308. data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
  309. data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
  310. data/lib/ddtrace/contrib/rails/ext.rb +1 -0
  311. data/lib/ddtrace/contrib/rails/framework.rb +50 -2
  312. data/lib/ddtrace/contrib/rails/integration.rb +1 -0
  313. data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
  314. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
  315. data/lib/ddtrace/contrib/rails/patcher.rb +40 -21
  316. data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
  317. data/lib/ddtrace/contrib/rails/utils.rb +5 -0
  318. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
  319. data/lib/ddtrace/contrib/rake/ext.rb +1 -0
  320. data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
  321. data/lib/ddtrace/contrib/rake/integration.rb +2 -1
  322. data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
  323. data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
  324. data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
  325. data/lib/ddtrace/contrib/redis/ext.rb +2 -0
  326. data/lib/ddtrace/contrib/redis/instrumentation.rb +90 -0
  327. data/lib/ddtrace/contrib/redis/integration.rb +1 -0
  328. data/lib/ddtrace/contrib/redis/patcher.rb +3 -67
  329. data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
  330. data/lib/ddtrace/contrib/redis/tags.rb +6 -1
  331. data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
  332. data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
  333. data/lib/ddtrace/contrib/registerable.rb +4 -4
  334. data/lib/ddtrace/contrib/registry.rb +3 -2
  335. data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
  336. data/lib/ddtrace/contrib/resque/ext.rb +1 -0
  337. data/lib/ddtrace/contrib/resque/integration.rb +2 -5
  338. data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
  339. data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
  340. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
  341. data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
  342. data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
  343. data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
  344. data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
  345. data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
  346. data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
  347. data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
  348. data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
  349. data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
  350. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
  351. data/lib/ddtrace/contrib/sequel/database.rb +2 -1
  352. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
  353. data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
  354. data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
  355. data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
  356. data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
  357. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
  358. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
  359. data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
  360. data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
  361. data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
  362. data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
  363. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
  364. data/lib/ddtrace/contrib/sidekiq/ext.rb +4 -0
  365. data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
  366. data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
  367. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
  368. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
  369. data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -0
  370. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
  371. data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
  372. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
  373. data/lib/ddtrace/contrib/sinatra/env.rb +4 -4
  374. data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
  375. data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
  376. data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
  377. data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
  378. data/lib/ddtrace/contrib/sinatra/tracer.rb +28 -7
  379. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
  380. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
  381. data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
  382. data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
  383. data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
  384. data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
  385. data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
  386. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
  387. data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
  388. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
  389. data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
  390. data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
  391. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
  392. data/lib/ddtrace/correlation.rb +3 -1
  393. data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
  394. data/lib/ddtrace/diagnostics/health.rb +1 -0
  395. data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
  396. data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
  397. data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
  398. data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
  399. data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
  400. data/lib/ddtrace/encoding.rb +3 -0
  401. data/lib/ddtrace/error.rb +78 -8
  402. data/lib/ddtrace/event.rb +1 -0
  403. data/lib/ddtrace/ext/analytics.rb +1 -0
  404. data/lib/ddtrace/ext/app_types.rb +1 -0
  405. data/lib/ddtrace/ext/correlation.rb +1 -0
  406. data/lib/ddtrace/ext/diagnostics.rb +1 -0
  407. data/lib/ddtrace/ext/distributed.rb +9 -2
  408. data/lib/ddtrace/ext/environment.rb +8 -0
  409. data/lib/ddtrace/ext/errors.rb +1 -0
  410. data/lib/ddtrace/ext/forced_tracing.rb +1 -0
  411. data/lib/ddtrace/ext/git.rb +32 -0
  412. data/lib/ddtrace/ext/http.rb +2 -1
  413. data/lib/ddtrace/ext/integration.rb +1 -0
  414. data/lib/ddtrace/ext/manual_tracing.rb +1 -0
  415. data/lib/ddtrace/ext/metrics.rb +1 -0
  416. data/lib/ddtrace/ext/net.rb +1 -0
  417. data/lib/ddtrace/ext/priority.rb +7 -4
  418. data/lib/ddtrace/ext/profiling.rb +53 -0
  419. data/lib/ddtrace/ext/runtime.rb +5 -7
  420. data/lib/ddtrace/ext/sampling.rb +1 -0
  421. data/lib/ddtrace/ext/sql.rb +1 -0
  422. data/lib/ddtrace/ext/test.rb +9 -0
  423. data/lib/ddtrace/ext/transport.rb +14 -0
  424. data/lib/ddtrace/forced_tracing.rb +3 -0
  425. data/lib/ddtrace/logger.rb +2 -1
  426. data/lib/ddtrace/metrics.rb +84 -24
  427. data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
  428. data/lib/ddtrace/opentelemetry/span.rb +1 -0
  429. data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
  430. data/lib/ddtrace/opentracer/carrier.rb +1 -0
  431. data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
  432. data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
  433. data/lib/ddtrace/opentracer/propagator.rb +1 -0
  434. data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
  435. data/lib/ddtrace/opentracer/scope.rb +1 -0
  436. data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
  437. data/lib/ddtrace/opentracer/span.rb +3 -6
  438. data/lib/ddtrace/opentracer/span_context.rb +1 -0
  439. data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
  440. data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
  441. data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
  442. data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
  443. data/lib/ddtrace/opentracer/tracer.rb +1 -0
  444. data/lib/ddtrace/opentracer.rb +21 -39
  445. data/lib/ddtrace/patcher.rb +28 -6
  446. data/lib/ddtrace/pin.rb +9 -61
  447. data/lib/ddtrace/pipeline/span_filter.rb +2 -1
  448. data/lib/ddtrace/pipeline/span_processor.rb +1 -0
  449. data/lib/ddtrace/pipeline.rb +1 -0
  450. data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
  451. data/lib/ddtrace/profiling/buffer.rb +42 -0
  452. data/lib/ddtrace/profiling/collectors/stack.rb +297 -0
  453. data/lib/ddtrace/profiling/encoding/profile.rb +46 -0
  454. data/lib/ddtrace/profiling/event.rb +14 -0
  455. data/lib/ddtrace/profiling/events/stack.rb +81 -0
  456. data/lib/ddtrace/profiling/exporter.rb +24 -0
  457. data/lib/ddtrace/profiling/ext/forking.rb +98 -0
  458. data/lib/ddtrace/profiling/flush.rb +44 -0
  459. data/lib/ddtrace/profiling/native_extension.rb +40 -0
  460. data/lib/ddtrace/profiling/pprof/builder.rb +126 -0
  461. data/lib/ddtrace/profiling/pprof/converter.rb +103 -0
  462. data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
  463. data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
  464. data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
  465. data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
  466. data/lib/ddtrace/profiling/pprof/stack_sample.rb +140 -0
  467. data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
  468. data/lib/ddtrace/profiling/pprof/template.rb +119 -0
  469. data/lib/ddtrace/profiling/preload.rb +4 -0
  470. data/lib/ddtrace/profiling/profiler.rb +31 -0
  471. data/lib/ddtrace/profiling/recorder.rb +96 -0
  472. data/lib/ddtrace/profiling/scheduler.rb +150 -0
  473. data/lib/ddtrace/profiling/tasks/setup.rb +90 -0
  474. data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +42 -0
  475. data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
  476. data/lib/ddtrace/profiling/transport/client.rb +15 -0
  477. data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +94 -0
  478. data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
  479. data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
  480. data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
  481. data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
  482. data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
  483. data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
  484. data/lib/ddtrace/profiling/transport/http.rb +111 -0
  485. data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
  486. data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
  487. data/lib/ddtrace/profiling/transport/io.rb +31 -0
  488. data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
  489. data/lib/ddtrace/profiling/transport/request.rb +16 -0
  490. data/lib/ddtrace/profiling/transport/response.rb +9 -0
  491. data/lib/ddtrace/profiling.rb +149 -0
  492. data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
  493. data/lib/ddtrace/propagation/http_propagator.rb +18 -2
  494. data/lib/ddtrace/quantization/hash.rb +1 -0
  495. data/lib/ddtrace/quantization/http.rb +4 -0
  496. data/lib/ddtrace/runtime/metrics.rb +35 -14
  497. data/lib/ddtrace/sampler.rb +20 -9
  498. data/lib/ddtrace/sampling/matcher.rb +1 -0
  499. data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
  500. data/lib/ddtrace/sampling/rule.rb +2 -1
  501. data/lib/ddtrace/sampling/rule_sampler.rb +19 -11
  502. data/lib/ddtrace/sampling.rb +1 -0
  503. data/lib/ddtrace/span.rb +27 -14
  504. data/lib/ddtrace/sync_writer.rb +17 -15
  505. data/lib/ddtrace/tasks/exec.rb +47 -0
  506. data/lib/ddtrace/tasks/help.rb +15 -0
  507. data/lib/ddtrace/tracer.rb +61 -50
  508. data/lib/ddtrace/transport/http/adapters/net.rb +41 -11
  509. data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
  510. data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
  511. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +26 -16
  512. data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
  513. data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
  514. data/lib/ddtrace/transport/http/api/instance.rb +1 -0
  515. data/lib/ddtrace/transport/http/api/map.rb +1 -0
  516. data/lib/ddtrace/transport/http/api/spec.rb +1 -0
  517. data/lib/ddtrace/transport/http/api.rb +1 -0
  518. data/lib/ddtrace/transport/http/builder.rb +21 -7
  519. data/lib/ddtrace/transport/http/client.rb +3 -1
  520. data/lib/ddtrace/transport/http/env.rb +9 -0
  521. data/lib/ddtrace/transport/http/response.rb +1 -0
  522. data/lib/ddtrace/transport/http/statistics.rb +3 -2
  523. data/lib/ddtrace/transport/http/traces.rb +6 -6
  524. data/lib/ddtrace/transport/http.rb +48 -41
  525. data/lib/ddtrace/transport/io/client.rb +17 -9
  526. data/lib/ddtrace/transport/io/response.rb +2 -3
  527. data/lib/ddtrace/transport/io/traces.rb +10 -1
  528. data/lib/ddtrace/transport/io.rb +2 -1
  529. data/lib/ddtrace/transport/parcel.rb +7 -0
  530. data/lib/ddtrace/transport/request.rb +1 -0
  531. data/lib/ddtrace/transport/response.rb +1 -0
  532. data/lib/ddtrace/transport/statistics.rb +1 -0
  533. data/lib/ddtrace/transport/traces.rb +21 -3
  534. data/lib/ddtrace/utils/compression.rb +28 -0
  535. data/lib/ddtrace/utils/database.rb +1 -0
  536. data/lib/ddtrace/utils/forking.rb +53 -0
  537. data/lib/ddtrace/utils/object_set.rb +40 -0
  538. data/lib/ddtrace/utils/only_once.rb +41 -0
  539. data/lib/ddtrace/utils/sequence.rb +18 -0
  540. data/lib/ddtrace/utils/string_table.rb +46 -0
  541. data/lib/ddtrace/utils/time.rb +40 -3
  542. data/lib/ddtrace/utils.rb +23 -12
  543. data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
  544. data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
  545. data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
  546. data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
  547. data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
  548. data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
  549. data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
  550. data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
  551. data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
  552. data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
  553. data/lib/ddtrace/version.rb +16 -3
  554. data/lib/ddtrace/worker.rb +1 -0
  555. data/lib/ddtrace/workers/async.rb +15 -5
  556. data/lib/ddtrace/workers/{loop.rb → interval_loop.rb} +23 -12
  557. data/lib/ddtrace/workers/polling.rb +14 -6
  558. data/lib/ddtrace/workers/queue.rb +3 -1
  559. data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
  560. data/lib/ddtrace/workers/trace_writer.rb +14 -16
  561. data/lib/ddtrace/workers.rb +8 -2
  562. data/lib/ddtrace/writer.rb +33 -8
  563. data/lib/ddtrace.rb +22 -48
  564. metadata +182 -405
  565. data/.circleci/config.yml +0 -548
  566. data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
  567. data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
  568. data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
  569. data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
  570. data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
  571. data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
  572. data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
  573. data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
  574. data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
  575. data/.dockerignore +0 -1
  576. data/.env +0 -26
  577. data/.github/CODEOWNERS +0 -1
  578. data/.gitlab-ci.yml +0 -27
  579. data/.rspec +0 -1
  580. data/.rubocop.yml +0 -85
  581. data/.simplecov +0 -38
  582. data/Appraisals +0 -1121
  583. data/Gemfile +0 -7
  584. data/Rakefile +0 -788
  585. data/benchmarks/postgres_database.yml +0 -9
  586. data/benchmarks/sidekiq_test.rb +0 -154
  587. data/docker-compose.yml +0 -370
  588. data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
  589. data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
  590. data/lib/ddtrace/augmentation/shim.rb +0 -102
  591. data/lib/ddtrace/augmentation.rb +0 -13
  592. data/lib/ddtrace/environment.rb +0 -41
  593. data/lib/ddtrace/monkey.rb +0 -58
  594. data/lib/ddtrace/runtime/cgroup.rb +0 -44
  595. data/lib/ddtrace/runtime/class_count.rb +0 -17
  596. data/lib/ddtrace/runtime/container.rb +0 -73
  597. data/lib/ddtrace/runtime/gc.rb +0 -16
  598. data/lib/ddtrace/runtime/identity.rb +0 -41
  599. data/lib/ddtrace/runtime/object_space.rb +0 -19
  600. data/lib/ddtrace/runtime/socket.rb +0 -14
  601. data/lib/ddtrace/runtime/thread_count.rb +0 -16
  602. data/tasks/release_gem.rake +0 -28
@@ -1,4 +1,6 @@
1
+ # typed: false
1
2
  require 'net/http'
3
+ require 'ddtrace/ext/transport'
2
4
  require 'ddtrace/transport/http/adapters/net'
3
5
 
4
6
  module Datadog
@@ -7,32 +9,38 @@ module Datadog
7
9
  module Adapters
8
10
  # Adapter for Unix sockets
9
11
  class UnixSocket < Adapters::Net
10
- DEFAULT_TIMEOUT = 1
11
-
12
12
  attr_reader \
13
- :filepath,
13
+ :filepath, # DEV(1.0): Rename to `uds_path`
14
14
  :timeout
15
15
 
16
- def initialize(filepath, options = {})
17
- @filepath = filepath
18
- @timeout = options.fetch(:timeout, DEFAULT_TIMEOUT)
16
+ alias_method :uds_path, :filepath
17
+
18
+ # @deprecated Positional parameters are deprecated. Use named parameters instead.
19
+ def initialize(uds_path = nil, **options)
20
+ @filepath = uds_path || options.fetch(:uds_path)
21
+ @timeout = options[:timeout] || Ext::Transport::UnixSocket::DEFAULT_TIMEOUT_SECONDS
19
22
  end
20
23
 
21
- def open
24
+ def self.build(agent_settings)
25
+ new(
26
+ uds_path: agent_settings.uds_path,
27
+ timeout: agent_settings.timeout_seconds,
28
+ )
29
+ end
30
+
31
+ def open(&block)
22
32
  # Open connection
23
33
  connection = HTTP.new(
24
- filepath,
34
+ uds_path,
25
35
  read_timeout: timeout,
26
36
  continue_timeout: timeout
27
37
  )
28
38
 
29
- connection.start do |http|
30
- yield(http)
31
- end
39
+ connection.start(&block)
32
40
  end
33
41
 
34
42
  def url
35
- "http+unix://#{filepath}?timeout=#{timeout}"
43
+ "http+unix://#{uds_path}?timeout=#{timeout}"
36
44
  end
37
45
 
38
46
  # Re-implements Net:HTTP with underlying Unix socket
@@ -40,19 +48,21 @@ module Datadog
40
48
  DEFAULT_TIMEOUT = 1
41
49
 
42
50
  attr_reader \
43
- :filepath,
51
+ :filepath, # DEV(1.0): Rename to `uds_path`
44
52
  :unix_socket
45
53
 
46
- def initialize(filepath, options = {})
54
+ alias_method :uds_path, :filepath
55
+
56
+ def initialize(uds_path, options = {})
47
57
  super('localhost', 80)
48
- @filepath = filepath
58
+ @filepath = uds_path
49
59
  @read_timeout = options.fetch(:read_timeout, DEFAULT_TIMEOUT)
50
60
  @continue_timeout = options.fetch(:continue_timeout, DEFAULT_TIMEOUT)
51
61
  @debug_output = options[:debug_output] if options.key?(:debug_output)
52
62
  end
53
63
 
54
64
  def connect
55
- @unix_socket = UNIXSocket.open(filepath)
65
+ @unix_socket = UNIXSocket.open(uds_path)
56
66
  @socket = ::Net::BufferedIO.new(@unix_socket).tap do |socket|
57
67
  socket.read_timeout = @read_timeout
58
68
  socket.continue_timeout = @continue_timeout
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'json'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  module Datadog
2
3
  module Transport
3
4
  module HTTP
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  module HTTP
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/api/fallbacks'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  module HTTP
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/encoding'
2
3
 
3
4
  require 'ddtrace/transport/http/api/map'
@@ -1,3 +1,5 @@
1
+ # typed: true
2
+ require 'ddtrace/configuration/agent_settings_resolver'
1
3
  require 'ddtrace/transport/http/adapters/registry'
2
4
  require 'ddtrace/transport/http/api/map'
3
5
  require 'ddtrace/transport/http/api/instance'
@@ -32,13 +34,20 @@ module Datadog
32
34
  yield(self) if block_given?
33
35
  end
34
36
 
35
- def adapter(type, *args)
36
- @default_adapter = if type.is_a?(Symbol)
37
- registry_klass = REGISTRY.get(type)
38
- raise UnknownAdapterError, type if registry_klass.nil?
39
- registry_klass.new(*args)
37
+ def adapter(config, *args, **kwargs)
38
+ @default_adapter = case config
39
+ when Configuration::AgentSettingsResolver::AgentSettings
40
+ registry_klass = REGISTRY.get(config.adapter)
41
+ raise UnknownAdapterError, config.adapter if registry_klass.nil?
42
+
43
+ registry_klass.build(config)
44
+ when Symbol
45
+ registry_klass = REGISTRY.get(config)
46
+ raise UnknownAdapterError, config if registry_klass.nil?
47
+
48
+ registry_klass.new(*args, **kwargs)
40
49
  else
41
- type
50
+ config
42
51
  end
43
52
  end
44
53
 
@@ -67,6 +76,7 @@ module Datadog
67
76
 
68
77
  def default_api=(key)
69
78
  raise UnknownApiError, key unless @apis.key?(key)
79
+
70
80
  @default_api = key
71
81
  end
72
82
 
@@ -93,7 +103,7 @@ module Datadog
93
103
  api_options[:headers] = @default_headers.merge((api_options[:headers] || {}))
94
104
 
95
105
  # Add API::Instance with all settings
96
- instances[key] = API::Instance.new(
106
+ instances[key] = api_instance_class.new(
97
107
  spec,
98
108
  adapter,
99
109
  api_options
@@ -105,6 +115,10 @@ module Datadog
105
115
  end
106
116
  end
107
117
 
118
+ def api_instance_class
119
+ API::Instance
120
+ end
121
+
108
122
  # Raised when the API key does not match known APIs.
109
123
  class UnknownApiError < StandardError
110
124
  attr_reader :key
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/http/statistics'
2
3
  require 'ddtrace/transport/http/env'
3
4
 
@@ -26,7 +27,8 @@ module Datadog
26
27
 
27
28
  response
28
29
  rescue StandardError => e
29
- message = "Internal error during HTTP transport request. Cause: #{e.message} Location: #{e.backtrace.first}"
30
+ message =
31
+ "Internal error during HTTP transport request. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
30
32
 
31
33
  # Log error
32
34
  if stats.consecutive_errors > 0
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  module HTTP
@@ -42,6 +43,14 @@ module Datadog
42
43
  def headers=(value)
43
44
  self[:headers] = value
44
45
  end
46
+
47
+ def form
48
+ self[:form] ||= {}
49
+ end
50
+
51
+ def form=(value)
52
+ self[:form] = value
53
+ end
45
54
  end
46
55
  end
47
56
  end
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'forwardable'
2
3
  require 'ddtrace/transport/response'
3
4
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/statistics'
2
3
 
3
4
  module Datadog
@@ -6,8 +7,8 @@ module Datadog
6
7
  # Tracks statistics for HTTP transports
7
8
  module Statistics
8
9
  def self.included(base)
9
- base.send(:include, Datadog::Transport::Statistics)
10
- base.send(:include, InstanceMethods)
10
+ base.include(Datadog::Transport::Statistics)
11
+ base.include(InstanceMethods)
11
12
  end
12
13
 
13
14
  # Instance methods for HTTP statistics
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'json'
2
3
 
3
4
  require 'ddtrace/transport/traces'
@@ -41,6 +42,7 @@ module Datadog
41
42
 
42
43
  def send_traces(env, &block)
43
44
  raise NoTraceEndpointDefinedError, self if traces.nil?
45
+
44
46
  traces.call(env, &block)
45
47
  end
46
48
 
@@ -121,9 +123,7 @@ module Datadog
121
123
  # Parse service rates, if configured to do so.
122
124
  if service_rates? && !http_response.payload.to_s.empty?
123
125
  body = JSON.parse(http_response.payload)
124
- if body.is_a?(Hash) && body.key?(SERVICE_RATE_KEY)
125
- options[:service_rates] = body[SERVICE_RATE_KEY]
126
- end
126
+ options[:service_rates] = body[SERVICE_RATE_KEY] if body.is_a?(Hash) && body.key?(SERVICE_RATE_KEY)
127
127
  end
128
128
  end
129
129
 
@@ -134,9 +134,9 @@ module Datadog
134
134
  end
135
135
 
136
136
  # Add traces behavior to transport components
137
- HTTP::Client.send(:include, Traces::Client)
138
- HTTP::API::Spec.send(:include, Traces::API::Spec)
139
- HTTP::API::Instance.send(:include, Traces::API::Instance)
137
+ HTTP::Client.include(Traces::Client)
138
+ HTTP::API::Spec.include(Traces::API::Spec)
139
+ HTTP::API::Instance.include(Traces::API::Instance)
140
140
  end
141
141
  end
142
142
  end
@@ -1,8 +1,9 @@
1
+ # typed: true
1
2
  require 'ddtrace/version'
2
- require 'ddtrace/ext/runtime'
3
+ require 'datadog/core/environment/ext'
3
4
  require 'ddtrace/ext/transport'
4
5
 
5
- require 'ddtrace/runtime/container'
6
+ require 'datadog/core/environment/container'
6
7
 
7
8
  require 'ddtrace/transport/http/builder'
8
9
  require 'ddtrace/transport/http/api'
@@ -16,6 +17,8 @@ module Datadog
16
17
  module Transport
17
18
  # Namespace for HTTP transport components
18
19
  module HTTP
20
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
21
+
19
22
  module_function
20
23
 
21
24
  # Builds a new Transport::HTTP::Client
@@ -25,11 +28,17 @@ module Datadog
25
28
 
26
29
  # Builds a new Transport::HTTP::Client with default settings
27
30
  # Pass a block to override any settings.
28
- def default(options = {})
31
+ def default(agent_settings: Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS, **options)
29
32
  new do |transport|
30
- transport.adapter :net_http, default_hostname, default_port
33
+ transport.adapter(agent_settings)
31
34
  transport.headers default_headers
32
35
 
36
+ if agent_settings.deprecated_for_removal_transport_configuration_options
37
+ # The deprecated_for_removal_transport_configuration_options take precedence over any options the caller
38
+ # specifies
39
+ options = options.merge(**agent_settings.deprecated_for_removal_transport_configuration_options)
40
+ end
41
+
33
42
  apis = API.defaults
34
43
 
35
44
  transport.api API::V4, apis[API::V4], fallback: API::V3, default: true
@@ -38,69 +47,67 @@ module Datadog
38
47
 
39
48
  # Apply any settings given by options
40
49
  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
50
  transport.default_api = options[:api_version] if options.key?(:api_version)
50
-
51
- # Add headers
52
51
  transport.headers options[:headers] if options.key?(:headers)
52
+ end
53
53
 
54
- # Execute on_build callback
55
- options[:on_build].call(transport) if options[:on_build].is_a?(Proc)
54
+ if agent_settings.deprecated_for_removal_transport_configuration_proc
55
+ agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
56
56
  end
57
57
 
58
- # Call block to apply any customization, if provided.
58
+ # Call block to apply any customization, if provided
59
59
  yield(transport) if block_given?
60
60
  end
61
61
  end
62
62
 
63
63
  def default_headers
64
64
  {
65
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG => Datadog::Ext::Runtime::LANG,
66
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG_VERSION => Datadog::Ext::Runtime::LANG_VERSION,
67
- Datadog::Ext::Transport::HTTP::HEADER_META_LANG_INTERPRETER => Datadog::Ext::Runtime::LANG_INTERPRETER,
68
- Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION => Datadog::Ext::Runtime::TRACER_VERSION
65
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG => Datadog::Core::Environment::Ext::LANG,
66
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
67
+ Datadog::Ext::Transport::HTTP::HEADER_META_LANG_INTERPRETER => Datadog::Core::Environment::Ext::LANG_INTERPRETER,
68
+ Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION => Datadog::Core::Environment::Ext::TRACER_VERSION
69
69
  }.tap do |headers|
70
70
  # Add container ID, if present.
71
- 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
71
+ container_id = Datadog::Core::Environment::Container.container_id
72
+ headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
75
73
  end
76
74
  end
77
75
 
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)
76
+ def default_adapter
77
+ Ext::Transport::HTTP::ADAPTER
82
78
  end
83
79
 
84
- def default_port
85
- return default_url.port if default_url
80
+ def default_hostname(logger: Datadog.logger)
81
+ logger.warn(
82
+ 'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
83
+ 'be removed on a future ddtrace release.'
84
+ )
86
85
 
87
- ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_PORT, Datadog::Ext::Transport::HTTP::DEFAULT_PORT).to_i
86
+ Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS.hostname
88
87
  end
89
88
 
90
- def default_url
91
- url_env = ENV.fetch(Datadog::Ext::Transport::HTTP::ENV_DEFAULT_URL, nil)
89
+ def default_port(logger: Datadog.logger)
90
+ logger.warn(
91
+ 'Deprecated for removal: Using #default_hostname for configuration is deprecated and will ' \
92
+ 'be removed on a future ddtrace release.'
93
+ )
92
94
 
93
- if url_env
94
- uri_parsed = URI.parse(url_env)
95
+ Datadog::Configuration::AgentSettingsResolver::ENVIRONMENT_AGENT_SETTINGS.port
96
+ end
95
97
 
96
- uri_parsed if %w[http https].include?(uri_parsed.scheme)
97
- end
98
+ def default_url(logger: Datadog.logger)
99
+ logger.warn(
100
+ 'Deprecated for removal: Using #default_url for configuration is deprecated and will ' \
101
+ 'be removed on a future ddtrace release.'
102
+ )
103
+
104
+ nil
98
105
  end
99
106
 
100
107
  # Add adapters to registry
101
- Builder::REGISTRY.set(Adapters::Net, :net_http)
102
- Builder::REGISTRY.set(Adapters::Test, :test)
103
- Builder::REGISTRY.set(Adapters::UnixSocket, :unix)
108
+ Builder::REGISTRY.set(Adapters::Net, Ext::Transport::HTTP::ADAPTER)
109
+ Builder::REGISTRY.set(Adapters::Test, Ext::Transport::Test::ADAPTER)
110
+ Builder::REGISTRY.set(Adapters::UnixSocket, Ext::Transport::UnixSocket::ADAPTER)
104
111
  end
105
112
  end
106
113
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/statistics'
2
3
  require 'ddtrace/transport/io/response'
3
4
 
@@ -12,19 +13,24 @@ module Datadog
12
13
  :encoder,
13
14
  :out
14
15
 
15
- def initialize(out, encoder)
16
+ def initialize(out, encoder, options = {})
16
17
  @out = out
17
18
  @encoder = encoder
19
+
20
+ @request_block = options.fetch(:request, method(:send_default_request))
21
+ @encode_block = options.fetch(:encode, method(:encode_data))
22
+ @write_block = options.fetch(:write, method(:write_data))
23
+ @response_block = options.fetch(:response, method(:build_response))
18
24
  end
19
25
 
20
26
  def send_request(request)
21
27
  # Write data to IO
22
28
  # If block is given, allow it to handle writing
23
- # Otherwise use default encoding.
29
+ # Otherwise do a standard encode/write/response.
24
30
  response = if block_given?
25
31
  yield(out, request)
26
32
  else
27
- send_default_request(out, request)
33
+ @request_block.call(out, request)
28
34
  end
29
35
 
30
36
  # Update statistics
@@ -33,7 +39,7 @@ module Datadog
33
39
  # Return response
34
40
  response
35
41
  rescue StandardError => e
36
- message = "Internal error during IO transport request. Cause: #{e.message} Location: #{e.backtrace.first}"
42
+ message = "Internal error during IO transport request. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
37
43
 
38
44
  # Log error
39
45
  if stats.consecutive_errors > 0
@@ -48,8 +54,6 @@ module Datadog
48
54
  InternalErrorResponse.new(e)
49
55
  end
50
56
 
51
- protected
52
-
53
57
  def encode_data(encoder, request)
54
58
  request.parcel.encode_with(encoder)
55
59
  end
@@ -58,17 +62,21 @@ module Datadog
58
62
  out.puts(data)
59
63
  end
60
64
 
65
+ def build_response(_request, _data, result)
66
+ IO::Response.new(result)
67
+ end
68
+
61
69
  private
62
70
 
63
71
  def send_default_request(out, request)
64
72
  # Encode data
65
- data = encode_data(encoder, request)
73
+ data = @encode_block.call(encoder, request)
66
74
 
67
75
  # Write to IO
68
- result = write_data(out, data)
76
+ result = @write_block.call(out, data)
69
77
 
70
78
  # Generate a response
71
- IO::Response.new(result)
79
+ @response_block.call(request, data, result)
72
80
  end
73
81
  end
74
82
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/response'
2
3
 
3
4
  module Datadog
@@ -6,14 +7,12 @@ module Datadog
6
7
  # Response from HTTP transport for traces
7
8
  class Response
8
9
  include Transport::Response
9
- include Transport::Traces::Response
10
10
 
11
11
  attr_reader \
12
12
  :result
13
13
 
14
- def initialize(result, trace_count = 1)
14
+ def initialize(result)
15
15
  @result = result
16
- @trace_count = trace_count
17
16
  end
18
17
 
19
18
  def ok?
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'ddtrace/transport/traces'
2
3
 
3
4
  require 'ddtrace/transport/io/response'
@@ -10,10 +11,18 @@ module Datadog
10
11
  module Traces
11
12
  # Response from HTTP transport for traces
12
13
  class Response < IO::Response
14
+ include Transport::Traces::Response
15
+
16
+ def initialize(result, trace_count = 1)
17
+ super(result)
18
+ @trace_count = trace_count
19
+ end
13
20
  end
14
21
 
15
22
  # Extensions for HTTP client
16
23
  module Client
24
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
25
+
17
26
  def send_traces(traces)
18
27
  # Build a request
19
28
  req = Transport::Traces::Request.new(Parcel.new(traces))
@@ -84,7 +93,7 @@ module Datadog
84
93
  end
85
94
 
86
95
  # Add traces behavior to transport components
87
- IO::Client.send(:include, Traces::Client)
96
+ IO::Client.include(Traces::Client)
88
97
  end
89
98
  end
90
99
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/encoding'
2
3
  require 'ddtrace/transport/io/client'
3
4
  require 'ddtrace/transport/io/traces'
@@ -17,7 +18,7 @@ module Datadog
17
18
  # Pass options to override any settings.
18
19
  def default(options = {})
19
20
  new(
20
- options.fetch(:out, STDOUT),
21
+ options.fetch(:out, $stdout),
21
22
  options.fetch(:encoder, Encoding::JSONEncoder)
22
23
  )
23
24
  end
@@ -1,13 +1,20 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  # Data transfer object for generic data
4
5
  module Parcel
6
+ include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
7
+
5
8
  attr_reader \
6
9
  :data
7
10
 
8
11
  def initialize(data)
9
12
  @data = data
10
13
  end
14
+
15
+ def encode_with(encoder)
16
+ raise NotImplementedError
17
+ end
11
18
  end
12
19
  end
13
20
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  # Defines request for transport operations
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  module Datadog
2
3
  module Transport
3
4
  # Defines abstract response for transport operations
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/diagnostics/health'
2
3
 
3
4
  module Datadog
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/parcel'
2
3
  require 'ddtrace/transport/request'
3
4
  require 'ddtrace/chunker'
@@ -7,7 +8,7 @@ module Datadog
7
8
  module Traces
8
9
  # Data transfer object for encoded traces
9
10
  class EncodedParcel
10
- include Transport::Parcel
11
+ include Datadog::Transport::Parcel
11
12
 
12
13
  attr_reader :trace_count
13
14
 
@@ -22,7 +23,7 @@ module Datadog
22
23
  end
23
24
 
24
25
  # Traces request
25
- class Request < Transport::Request
26
+ class Request < Datadog::Transport::Request
26
27
  end
27
28
 
28
29
  # Traces response
@@ -123,7 +124,21 @@ module Datadog
123
124
  return send_traces(traces)
124
125
  end
125
126
  end
126
- end.force
127
+ end
128
+
129
+ # Force resolution of lazy enumerator.
130
+ #
131
+ # The "correct" method to call here would be `#force`,
132
+ # as this method was created to force the eager loading
133
+ # of a lazy enumerator.
134
+ #
135
+ # Unfortunately, JRuby < 9.2.9.0 erroneously eagerly loads
136
+ # the lazy Enumerator during intermediate steps.
137
+ # This forces us to use `#to_a`, as this method works for both
138
+ # lazy and regular Enumerators.
139
+ # Using `#to_a` can mask the fact that we expect a lazy
140
+ # Enumerator.
141
+ responses = responses.to_a
127
142
 
128
143
  Datadog.health_metrics.transport_chunked(responses.size)
129
144
 
@@ -142,17 +157,20 @@ module Datadog
142
157
 
143
158
  def downgrade?(response)
144
159
  return false unless apis.fallbacks.key?(@current_api_id)
160
+
145
161
  response.not_found? || response.unsupported?
146
162
  end
147
163
 
148
164
  def downgrade!
149
165
  downgrade_api_id = apis.fallbacks[@current_api_id]
150
166
  raise NoDowngradeAvailableError, @current_api_id if downgrade_api_id.nil?
167
+
151
168
  change_api!(downgrade_api_id)
152
169
  end
153
170
 
154
171
  def change_api!(api_id)
155
172
  raise UnknownApiVersionError, api_id unless apis.key?(api_id)
173
+
156
174
  @current_api_id = api_id
157
175
  @client = HTTP::Client.new(current_api)
158
176
  end