ddtrace 0.40.0 → 0.54.1

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 +1667 -350
  5. data/CONTRIBUTING.md +3 -7
  6. data/LICENSE-3rdparty.csv +2 -0
  7. data/README.md +1 -0
  8. data/bin/ddtracerb +15 -0
  9. data/ddtrace.gemspec +21 -37
  10. data/docs/DevelopmentGuide.md +56 -8
  11. data/docs/GettingStarted.md +438 -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 +166 -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 +278 -57
  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 +10 -10
  67. data/lib/ddtrace/configuration/pin_setup.rb +1 -0
  68. data/lib/ddtrace/configuration/settings.rb +147 -13
  69. data/lib/ddtrace/configuration.rb +133 -22
  70. data/lib/ddtrace/context.rb +51 -22
  71. data/lib/ddtrace/context_flush.rb +15 -2
  72. data/lib/ddtrace/context_provider.rb +17 -5
  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 +5 -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 +12 -7
  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 +36 -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 +6 -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 +3 -0
  177. data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -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 +40 -16
  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 +6 -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 +15 -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 +6 -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 +14 -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 +6 -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 +73 -35
  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 +6 -1
  217. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -1
  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 +13 -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 +20 -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 +7 -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 +6 -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 +5 -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 +8 -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 +47 -17
  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 +10 -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 +7 -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 +5 -2
  352. data/lib/ddtrace/contrib/sequel/dataset.rb +5 -3
  353. data/lib/ddtrace/contrib/sequel/ext.rb +2 -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 +16 -5
  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 +9 -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 +57 -0
  419. data/lib/ddtrace/ext/runtime.rb +5 -6
  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 +5 -1
  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 +301 -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 +134 -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 +101 -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 +20 -6
  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 +40 -15
  497. data/lib/ddtrace/sampler.rb +22 -11
  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 +174 -36
  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 +72 -62
  508. data/lib/ddtrace/transport/http/adapters/net.rb +48 -12
  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 +17 -3
  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 +28 -5
  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 +29 -14
  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 +32 -5
  557. data/lib/ddtrace/workers/polling.rb +13 -5
  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 +180 -374
  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 -1071
  583. data/Gemfile +0 -7
  584. data/Rakefile +0 -791
  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,16 +1,18 @@
1
- require 'pp'
2
- require 'thread'
1
+ # typed: true
3
2
  require 'logger'
4
3
  require 'pathname'
5
4
 
6
- require 'ddtrace/environment'
5
+ require 'ddtrace/ext/environment'
7
6
  require 'ddtrace/span'
8
7
  require 'ddtrace/context'
9
8
  require 'ddtrace/logger'
10
9
  require 'ddtrace/writer'
10
+ require 'datadog/core/environment/identity'
11
11
  require 'ddtrace/sampler'
12
12
  require 'ddtrace/sampling'
13
13
  require 'ddtrace/correlation'
14
+ require 'ddtrace/event'
15
+ require 'ddtrace/utils/only_once'
14
16
 
15
17
  # \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
16
18
  module Datadog
@@ -20,6 +22,9 @@ module Datadog
20
22
  # of these function calls and sub-requests would be encapsulated within a single trace.
21
23
  # rubocop:disable Metrics/ClassLength
22
24
  class Tracer
25
+ SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
26
+ SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
27
+
23
28
  attr_reader :sampler, :tags, :provider, :context_flush
24
29
  attr_accessor :enabled, :writer
25
30
  attr_writer :default_service
@@ -28,8 +33,7 @@ module Datadog
28
33
  DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
29
34
 
30
35
  def services
31
- # Only log each deprecation warning once (safeguard against log spam)
32
- Datadog::Patcher.do_once('Tracer#set_service_info') do
36
+ SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
33
37
  Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
34
38
  end
35
39
 
@@ -60,8 +64,8 @@ module Datadog
60
64
  #
61
65
  # This method makes use of a \ContextProvider that is automatically set during the tracer
62
66
  # initialization, or while using a library instrumentation.
63
- def call_context
64
- @provider.context
67
+ def call_context(key = nil)
68
+ @provider.context(key)
65
69
  end
66
70
 
67
71
  # Initialize a new \Tracer used to create, sample and submit spans that measure the
@@ -71,7 +75,9 @@ module Datadog
71
75
  # by default.
72
76
  def initialize(options = {})
73
77
  # Configurable options
74
- @context_flush = if options[:partial_flush]
78
+ @context_flush = if options[:context_flush]
79
+ options[:context_flush]
80
+ elsif options[:partial_flush]
75
81
  Datadog::ContextFlush::Partial.new(options)
76
82
  else
77
83
  Datadog::ContextFlush::Finished.new
@@ -79,14 +85,13 @@ module Datadog
79
85
 
80
86
  @default_service = options[:default_service]
81
87
  @enabled = options.fetch(:enabled, true)
82
- @provider = options.fetch(:context_provider, Datadog::DefaultContextProvider.new)
88
+ @provider = options[:context_provider] || Datadog::DefaultContextProvider.new
83
89
  @sampler = options.fetch(:sampler, Datadog::AllSampler.new)
84
90
  @tags = options.fetch(:tags, {})
85
- @writer = options.fetch(:writer, Datadog::Writer.new)
91
+ @writer = options.fetch(:writer) { Datadog::Writer.new }
86
92
 
87
93
  # Instance variables
88
94
  @mutex = Mutex.new
89
- @provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
90
95
 
91
96
  # Enable priority sampling by default
92
97
  activate_priority_sampling!(@sampler)
@@ -115,8 +120,10 @@ module Datadog
115
120
 
116
121
  configure_writer(options)
117
122
 
118
- if options.key?(:partial_flush)
119
- @context_flush = if options[:partial_flush]
123
+ if options.key?(:context_flush) || options.key?(:partial_flush)
124
+ @context_flush = if options[:context_flush]
125
+ options[:context_flush]
126
+ elsif options[:partial_flush]
120
127
  Datadog::ContextFlush::Partial.new(options)
121
128
  else
122
129
  Datadog::ContextFlush::Finished.new
@@ -130,8 +137,7 @@ module Datadog
130
137
  #
131
138
  # set_service_info is deprecated, no service information needs to be tracked
132
139
  def set_service_info(service, app, app_type)
133
- # Only log each deprecation warning once (safeguard against log spam)
134
- Datadog::Patcher.do_once('Tracer#set_service_info') do
140
+ SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
135
141
  Datadog.logger.warn(%(
136
142
  set_service_info: Usage of set_service_info has been deprecated,
137
143
  service information no longer needs to be reported to the trace agent.
@@ -143,14 +149,7 @@ module Datadog
143
149
  # for non-root spans which have a parent. However, root spans without
144
150
  # a service would be invalid and rejected.
145
151
  def default_service
146
- return @default_service if instance_variable_defined?(:@default_service) && @default_service
147
- begin
148
- @default_service = File.basename($PROGRAM_NAME, '.*')
149
- rescue StandardError => e
150
- Datadog.logger.error("unable to guess default service: #{e}")
151
- @default_service = 'ruby'.freeze
152
- end
153
- @default_service
152
+ @default_service ||= Datadog::Ext::Environment::FALLBACK_SERVICE_NAME
154
153
  end
155
154
 
156
155
  # Set the given key / value tag pair at the tracer level. These tags will be
@@ -159,7 +158,7 @@ module Datadog
159
158
  #
160
159
  # tracer.set_tags('env' => 'prod', 'component' => 'core')
161
160
  def set_tags(tags)
162
- string_tags = Hash[tags.collect { |k, v| [k.to_s, v] }]
161
+ string_tags = tags.collect { |k, v| [k.to_s, v] }.to_h
163
162
  @tags = @tags.merge(string_tags)
164
163
  end
165
164
 
@@ -186,8 +185,7 @@ module Datadog
186
185
  # * +start_time+: when the span actually starts (defaults to \now)
187
186
  # * +tags+: extra tags which should be added to the span.
188
187
  def start_span(name, options = {})
189
- start_time = options.fetch(:start_time, Time.now.utc)
190
-
188
+ start_time = options[:start_time]
191
189
  tags = options.fetch(:tags, {})
192
190
 
193
191
  span_options = options.select do |k, _v|
@@ -202,7 +200,8 @@ module Datadog
202
200
  if parent.nil?
203
201
  # root span
204
202
  @sampler.sample!(span)
205
- span.set_tag('system.pid', Process.pid)
203
+ span.set_tag(Datadog::Ext::Runtime::TAG_PID, Process.pid)
204
+ span.set_tag(Datadog::Ext::Runtime::TAG_ID, Datadog::Core::Environment::Identity.id)
206
205
 
207
206
  if ctx && ctx.trace_id
208
207
  span.trace_id = ctx.trace_id
@@ -212,9 +211,10 @@ module Datadog
212
211
  # child span
213
212
  span.parent = parent # sets service, trace_id, parent_id, sampled
214
213
  end
214
+
215
215
  span.set_tags(@tags) unless @tags.empty?
216
216
  span.set_tags(tags) unless tags.empty?
217
- span.start_time = start_time
217
+ span.start(start_time)
218
218
 
219
219
  # this could at some point be optional (start_active_span vs start_manual_span)
220
220
  ctx.add_span(span) unless ctx.nil?
@@ -288,8 +288,19 @@ module Datadog
288
288
  # and it is user code which should be executed no matter what.
289
289
  # It's not a problem since we re-raise it afterwards so for example a
290
290
  # SignalException::Interrupt would still bubble up.
291
+ # rubocop:disable Metrics/BlockNesting
291
292
  rescue Exception => e
292
- (options[:on_error] || DEFAULT_ON_ERROR).call(span, e)
293
+ if (on_error_handler = options[:on_error]) && on_error_handler.respond_to?(:call)
294
+ begin
295
+ on_error_handler.call(span, e)
296
+ rescue
297
+ Datadog.logger.debug('Custom on_error handler failed, falling back to default')
298
+ DEFAULT_ON_ERROR.call(span, e)
299
+ end
300
+ else
301
+ Datadog.logger.debug('Custom on_error handler must be a callable, falling back to default') if on_error_handler
302
+ DEFAULT_ON_ERROR.call(span, e)
303
+ end
293
304
  raise e
294
305
  ensure
295
306
  span.finish unless span.nil?
@@ -301,6 +312,10 @@ module Datadog
301
312
  end
302
313
  end
303
314
 
315
+ def trace_completed
316
+ @trace_completed ||= TraceCompleted.new
317
+ end
318
+
304
319
  # Record the given +context+. For compatibility with previous versions,
305
320
  # +context+ can also be a span. It is similar to the +child_of+ argument,
306
321
  # method will figure out what to do, submitting a +span+ for recording
@@ -325,18 +340,18 @@ module Datadog
325
340
  end
326
341
 
327
342
  # Return the current active span or +nil+.
328
- def active_span
329
- call_context.current_span
343
+ def active_span(key = nil)
344
+ call_context(key).current_span
330
345
  end
331
346
 
332
347
  # Return the current active root span or +nil+.
333
- def active_root_span
334
- call_context.current_root_span
348
+ def active_root_span(key = nil)
349
+ call_context(key).current_root_span
335
350
  end
336
351
 
337
352
  # Return a CorrelationIdentifier for active span
338
- def active_correlation
339
- Datadog::Correlation.identifier_from_context(call_context)
353
+ def active_correlation(key = nil)
354
+ Datadog::Correlation.identifier_from_context(call_context(key))
340
355
  end
341
356
 
342
357
  # Send the trace to the writer to enqueue the spans list in the agent
@@ -352,24 +367,34 @@ module Datadog
352
367
  end
353
368
 
354
369
  @writer.write(trace)
370
+ trace_completed.publish(trace)
371
+ end
372
+
373
+ # Triggered whenever a trace is completed
374
+ class TraceCompleted < Datadog::Event
375
+ def initialize
376
+ super(:trace_completed)
377
+ end
378
+
379
+ # NOTE: Ignore Rubocop rule. This definition allows for
380
+ # description of and constraints on arguments.
381
+ # rubocop:disable Lint/UselessMethodDefinition
382
+ def publish(trace)
383
+ super(trace)
384
+ end
385
+ # rubocop:enable Lint/UselessMethodDefinition
355
386
  end
356
387
 
357
388
  # TODO: Move this kind of configuration building out of the tracer.
358
389
  # Tracer should not have this kind of knowledge of writer.
359
- # rubocop:disable Metrics/PerceivedComplexity
360
- # rubocop:disable Metrics/CyclomaticComplexity
361
- # rubocop:disable Metrics/MethodLength
362
390
  def configure_writer(options = {})
363
- hostname = options.fetch(:hostname, nil)
364
- port = options.fetch(:port, nil)
365
391
  sampler = options.fetch(:sampler, nil)
366
392
  priority_sampling = options.fetch(:priority_sampling, nil)
367
393
  writer = options.fetch(:writer, nil)
368
- transport_options = options.fetch(:transport_options, {}).dup
394
+ agent_settings = options.fetch(:agent_settings, nil)
369
395
 
370
396
  # Compile writer options
371
397
  writer_options = options.fetch(:writer_options, {}).dup
372
- rebuild_writer = !writer_options.empty?
373
398
 
374
399
  # Re-build the sampler and writer if priority sampling is enabled,
375
400
  # but neither are configured. Verify the sampler isn't already a
@@ -382,35 +407,20 @@ module Datadog
382
407
  end
383
408
  elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
384
409
  writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
385
- rebuild_writer = true
386
410
  elsif priority_sampling == false
387
411
  deactivate_priority_sampling!(sampler)
388
- rebuild_writer = true
389
412
  elsif @sampler.is_a?(PrioritySampler)
390
413
  # Make sure to add sampler to options if transport is rebuilt.
391
414
  writer_options[:priority_sampler] = @sampler
392
415
  end
393
416
 
394
- # Apply options to transport
395
- if transport_options.is_a?(Proc)
396
- transport_options = { on_build: transport_options }
397
- rebuild_writer = true
398
- end
399
-
400
- if hostname || port
401
- transport_options[:hostname] = hostname unless hostname.nil?
402
- transport_options[:port] = port unless port.nil?
403
- rebuild_writer = true
404
- end
417
+ writer_options[:agent_settings] = agent_settings if agent_settings
405
418
 
406
- writer_options[:transport_options] = transport_options
419
+ # Make sure old writer is shut down before throwing away.
420
+ # Don't want additional threads running...
421
+ @writer.stop unless writer.nil?
407
422
 
408
- if rebuild_writer || writer
409
- # Make sure old writer is shut down before throwing away.
410
- # Don't want additional threads running...
411
- @writer.stop unless writer.nil?
412
- @writer = writer || Writer.new(writer_options)
413
- end
423
+ @writer = writer || Writer.new(writer_options)
414
424
  end
415
425
 
416
426
  def activate_priority_sampling!(base_sampler = nil)
@@ -1,4 +1,6 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/response'
3
+ require 'ddtrace/vendor/multipart-post/net/http/post/multipart'
2
4
 
3
5
  module Datadog
4
6
  module Transport
@@ -9,21 +11,38 @@ module Datadog
9
11
  attr_reader \
10
12
  :hostname,
11
13
  :port,
12
- :timeout
14
+ :timeout,
15
+ :ssl
13
16
 
14
- DEFAULT_TIMEOUT = 1
17
+ DEFAULT_TIMEOUT = 30
15
18
 
16
- def initialize(hostname, port, options = {})
17
- @hostname = hostname
18
- @port = port
19
+ # @deprecated Positional parameters are deprecated. Use named parameters instead.
20
+ def initialize(hostname = nil, port = nil, **options)
21
+ @hostname = hostname || options.fetch(:hostname)
22
+ @port = port || options.fetch(:port)
19
23
  @timeout = options[:timeout] || DEFAULT_TIMEOUT
24
+ @ssl = options.key?(:ssl) ? options[:ssl] == true : false
20
25
  end
21
26
 
22
- def open
23
- # Open connection
24
- ::Net::HTTP.start(hostname, port, open_timeout: timeout, read_timeout: timeout) do |http|
25
- yield(http)
26
- end
27
+ def self.build(agent_settings)
28
+ new(
29
+ hostname: agent_settings.hostname,
30
+ port: agent_settings.port,
31
+ timeout: agent_settings.timeout_seconds,
32
+ ssl: agent_settings.ssl
33
+ )
34
+ end
35
+
36
+ def open(&block)
37
+ # DEV Initializing +Net::HTTP+ directly help us avoid expensive
38
+ # options processing done in +Net::HTTP.start+:
39
+ # https://github.com/ruby/ruby/blob/b2d96abb42abbe2e01f010ffc9ac51f0f9a50002/lib/net/http.rb#L614-L618
40
+ req = ::Net::HTTP.new(hostname, port, nil)
41
+
42
+ req.use_ssl = ssl
43
+ req.open_timeout = req.read_timeout = timeout
44
+
45
+ req.start(&block)
27
46
  end
28
47
 
29
48
  def call(env)
@@ -35,8 +54,18 @@ module Datadog
35
54
  end
36
55
 
37
56
  def post(env)
38
- post = ::Net::HTTP::Post.new(env.path, env.headers)
39
- post.body = env.body
57
+ post = nil
58
+
59
+ if env.form.nil? || env.form.empty?
60
+ post = ::Net::HTTP::Post.new(env.path, env.headers)
61
+ post.body = env.body
62
+ else
63
+ post = ::Datadog::Vendor::Net::HTTP::Post::Multipart.new(
64
+ env.path,
65
+ env.form,
66
+ env.headers
67
+ )
68
+ end
40
69
 
41
70
  # Connect and send the request
42
71
  http_response = open do |http|
@@ -76,36 +105,43 @@ module Datadog
76
105
 
77
106
  def payload
78
107
  return super if http_response.nil?
108
+
79
109
  http_response.body
80
110
  end
81
111
 
82
112
  def code
83
113
  return super if http_response.nil?
114
+
84
115
  http_response.code.to_i
85
116
  end
86
117
 
87
118
  def ok?
88
119
  return super if http_response.nil?
120
+
89
121
  code.between?(200, 299)
90
122
  end
91
123
 
92
124
  def unsupported?
93
125
  return super if http_response.nil?
126
+
94
127
  code == 415
95
128
  end
96
129
 
97
130
  def not_found?
98
131
  return super if http_response.nil?
132
+
99
133
  code == 404
100
134
  end
101
135
 
102
136
  def client_error?
103
137
  return super if http_response.nil?
138
+
104
139
  code.between?(400, 499)
105
140
  end
106
141
 
107
142
  def server_error?
108
143
  return super if http_response.nil?
144
+
109
145
  code.between?(500, 599)
110
146
  end
111
147
 
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Datadog
2
3
  module Transport
3
4
  module HTTP
@@ -15,6 +16,7 @@ module Datadog
15
16
  def set(klass, name = nil)
16
17
  name ||= klass.to_s
17
18
  return if name.nil?
19
+
18
20
  @adapters[name] = klass
19
21
  end
20
22
  end
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  require 'ddtrace/transport/response'
2
3
 
3
4
  module Datadog
@@ -10,8 +11,10 @@ module Datadog
10
11
  :buffer,
11
12
  :status
12
13
 
13
- def initialize(buffer = nil)
14
- @buffer = buffer
14
+ # @param buffer [Array] an optional array that will capture all spans sent to this adapter, defaults to +nil+
15
+ # @deprecated Positional parameters are deprecated. Use named parameters instead.
16
+ def initialize(buffer = nil, **options)
17
+ @buffer = buffer || options[:buffer]
15
18
  @mutex = Mutex.new
16
19
  @status = 200
17
20
  end
@@ -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