ddtrace 1.2.0 → 1.10.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 (766) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +442 -2
  3. data/LICENSE-3rdparty.csv +4 -0
  4. data/README.md +2 -2
  5. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +20 -4
  6. data/ext/ddtrace_profiling_loader/extconf.rb +21 -3
  7. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +46 -3
  8. data/ext/ddtrace_profiling_native_extension/clock_id.h +21 -0
  9. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +33 -2
  10. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +10 -1
  11. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +821 -0
  12. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
  15. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  16. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +186 -85
  17. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +13 -2
  18. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +978 -0
  19. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +14 -0
  20. data/ext/ddtrace_profiling_native_extension/extconf.rb +54 -34
  21. data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
  22. data/ext/ddtrace_profiling_native_extension/http_transport.c +127 -121
  23. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +25 -0
  24. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +82 -37
  25. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +189 -139
  26. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +15 -6
  27. data/ext/ddtrace_profiling_native_extension/profiling.c +221 -5
  28. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
  29. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +57 -1
  30. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
  31. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
  32. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +489 -45
  33. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +12 -35
  34. data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
  35. data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
  36. data/lib/datadog/appsec/assets/blocked.html +98 -3
  37. data/lib/datadog/appsec/assets/blocked.json +1 -0
  38. data/lib/datadog/appsec/assets/blocked.text +5 -0
  39. data/lib/datadog/appsec/assets/waf_rules/recommended.json +1722 -636
  40. data/lib/datadog/appsec/assets/waf_rules/strict.json +366 -74
  41. data/lib/datadog/appsec/assets.rb +2 -4
  42. data/lib/datadog/appsec/autoload.rb +5 -10
  43. data/lib/datadog/appsec/component.rb +41 -0
  44. data/lib/datadog/appsec/configuration/settings.rb +46 -24
  45. data/lib/datadog/appsec/configuration.rb +12 -4
  46. data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -4
  47. data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -3
  48. data/lib/datadog/appsec/contrib/integration.rb +0 -2
  49. data/lib/datadog/appsec/contrib/patcher.rb +0 -2
  50. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -4
  51. data/lib/datadog/appsec/contrib/rack/ext.rb +0 -2
  52. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +97 -0
  53. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  54. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +117 -110
  55. data/lib/datadog/appsec/contrib/rack/integration.rb +5 -7
  56. data/lib/datadog/appsec/contrib/rack/patcher.rb +4 -4
  57. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +31 -38
  58. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +21 -22
  59. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +21 -22
  60. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +9 -7
  61. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +80 -39
  62. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -4
  63. data/lib/datadog/appsec/contrib/rails/ext.rb +0 -2
  64. data/lib/datadog/appsec/contrib/rails/framework.rb +0 -2
  65. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  66. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +45 -40
  67. data/lib/datadog/appsec/contrib/rails/integration.rb +5 -7
  68. data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -16
  69. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +24 -23
  70. data/lib/datadog/appsec/contrib/rails/request.rb +3 -2
  71. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +0 -2
  72. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -4
  73. data/lib/datadog/appsec/contrib/sinatra/ext.rb +1 -2
  74. data/lib/datadog/appsec/contrib/sinatra/framework.rb +0 -2
  75. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  76. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  77. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +82 -75
  78. data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -6
  79. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -18
  80. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +21 -20
  81. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +0 -2
  82. data/lib/datadog/appsec/event.rb +8 -16
  83. data/lib/datadog/appsec/ext.rb +9 -0
  84. data/lib/datadog/appsec/extensions.rb +51 -23
  85. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +24 -0
  86. data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
  87. data/lib/datadog/appsec/instrumentation.rb +9 -0
  88. data/lib/datadog/appsec/monitor/gateway/watcher.rb +86 -0
  89. data/lib/datadog/appsec/monitor/reactive/set_user.rb +61 -0
  90. data/lib/datadog/appsec/monitor.rb +11 -0
  91. data/lib/datadog/appsec/processor.rb +110 -31
  92. data/lib/datadog/appsec/rate_limiter.rb +0 -2
  93. data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
  94. data/lib/datadog/appsec/reactive/engine.rb +12 -9
  95. data/lib/datadog/appsec/reactive/operation.rb +22 -5
  96. data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
  97. data/lib/datadog/appsec/response.rb +61 -0
  98. data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
  99. data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
  100. data/lib/datadog/appsec/utils/http.rb +9 -0
  101. data/lib/datadog/appsec/utils.rb +7 -0
  102. data/lib/datadog/appsec.rb +25 -7
  103. data/lib/datadog/ci/configuration/components.rb +1 -3
  104. data/lib/datadog/ci/configuration/settings.rb +1 -3
  105. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -4
  106. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -2
  107. data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -7
  108. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -3
  109. data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -6
  110. data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -4
  111. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -4
  112. data/lib/datadog/ci/contrib/rspec/example.rb +5 -7
  113. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -2
  114. data/lib/datadog/ci/contrib/rspec/integration.rb +4 -6
  115. data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -4
  116. data/lib/datadog/ci/ext/app_types.rb +0 -2
  117. data/lib/datadog/ci/ext/environment.rb +77 -41
  118. data/lib/datadog/ci/ext/settings.rb +0 -2
  119. data/lib/datadog/ci/ext/test.rb +0 -2
  120. data/lib/datadog/ci/extensions.rb +4 -6
  121. data/lib/datadog/ci/flush.rb +2 -4
  122. data/lib/datadog/ci/test.rb +3 -5
  123. data/lib/datadog/ci.rb +6 -8
  124. data/lib/datadog/core/buffer/cruby.rb +1 -3
  125. data/lib/datadog/core/buffer/random.rb +0 -2
  126. data/lib/datadog/core/buffer/thread_safe.rb +1 -3
  127. data/lib/datadog/core/chunker.rb +0 -2
  128. data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -28
  129. data/lib/datadog/core/configuration/base.rb +14 -4
  130. data/lib/datadog/core/configuration/components.rb +31 -299
  131. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -2
  132. data/lib/datadog/core/configuration/ext.rb +24 -0
  133. data/lib/datadog/core/configuration/option.rb +0 -2
  134. data/lib/datadog/core/configuration/option_definition.rb +12 -5
  135. data/lib/datadog/core/configuration/option_definition_set.rb +1 -3
  136. data/lib/datadog/core/configuration/option_set.rb +0 -2
  137. data/lib/datadog/core/configuration/options.rb +3 -5
  138. data/lib/datadog/core/configuration/settings.rb +87 -257
  139. data/lib/datadog/core/configuration.rb +9 -10
  140. data/lib/datadog/core/diagnostics/environment_logger.rb +10 -7
  141. data/lib/datadog/core/diagnostics/health.rb +4 -24
  142. data/lib/datadog/core/encoding.rb +0 -4
  143. data/lib/datadog/core/environment/cgroup.rb +1 -5
  144. data/lib/datadog/core/environment/class_count.rb +0 -2
  145. data/lib/datadog/core/environment/container.rb +1 -5
  146. data/lib/datadog/core/environment/ext.rb +1 -3
  147. data/lib/datadog/core/environment/gc.rb +0 -2
  148. data/lib/datadog/core/environment/identity.rb +2 -4
  149. data/lib/datadog/core/environment/platform.rb +1 -3
  150. data/lib/datadog/core/environment/socket.rb +1 -3
  151. data/lib/datadog/core/environment/thread_count.rb +0 -2
  152. data/lib/datadog/core/environment/variable_helpers.rb +58 -12
  153. data/lib/datadog/core/environment/vm_cache.rb +17 -2
  154. data/lib/datadog/core/error.rb +1 -3
  155. data/lib/datadog/core/extensions.rb +1 -3
  156. data/lib/datadog/core/git/ext.rb +0 -2
  157. data/lib/datadog/core/header_collection.rb +41 -0
  158. data/lib/datadog/core/logger.rb +0 -2
  159. data/lib/datadog/core/metrics/client.rb +10 -11
  160. data/lib/datadog/core/metrics/ext.rb +0 -4
  161. data/lib/datadog/core/metrics/helpers.rb +0 -2
  162. data/lib/datadog/core/metrics/logging.rb +0 -2
  163. data/lib/datadog/core/metrics/metric.rb +0 -2
  164. data/lib/datadog/core/metrics/options.rb +3 -5
  165. data/lib/datadog/core/pin.rb +0 -2
  166. data/lib/datadog/core/runtime/ext.rb +3 -3
  167. data/lib/datadog/core/runtime/metrics.rb +27 -13
  168. data/lib/datadog/core/telemetry/client.rb +77 -0
  169. data/lib/datadog/core/telemetry/collector.rb +231 -0
  170. data/lib/datadog/core/telemetry/emitter.rb +46 -0
  171. data/lib/datadog/core/telemetry/event.rb +67 -0
  172. data/lib/datadog/core/telemetry/ext.rb +9 -0
  173. data/lib/datadog/core/telemetry/heartbeat.rb +35 -0
  174. data/lib/datadog/core/telemetry/http/adapters/net.rb +111 -0
  175. data/lib/datadog/core/telemetry/http/env.rb +18 -0
  176. data/lib/datadog/core/telemetry/http/ext.rb +20 -0
  177. data/lib/datadog/core/telemetry/http/response.rb +64 -0
  178. data/lib/datadog/core/telemetry/http/transport.rb +51 -0
  179. data/lib/datadog/core/telemetry/v1/app_event.rb +50 -0
  180. data/lib/datadog/core/telemetry/v1/application.rb +86 -0
  181. data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
  182. data/lib/datadog/core/telemetry/v1/dependency.rb +36 -0
  183. data/lib/datadog/core/telemetry/v1/host.rb +51 -0
  184. data/lib/datadog/core/telemetry/v1/integration.rb +58 -0
  185. data/lib/datadog/core/telemetry/v1/product.rb +28 -0
  186. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +100 -0
  187. data/lib/datadog/core/utils/compression.rb +5 -3
  188. data/lib/datadog/core/utils/forking.rb +0 -2
  189. data/lib/datadog/core/utils/network.rb +140 -0
  190. data/lib/datadog/core/utils/object_set.rb +1 -3
  191. data/lib/datadog/core/utils/only_once.rb +0 -2
  192. data/lib/datadog/core/utils/safe_dup.rb +0 -2
  193. data/lib/datadog/core/utils/sequence.rb +5 -2
  194. data/lib/datadog/core/utils/string_table.rb +1 -3
  195. data/lib/datadog/core/utils/time.rb +3 -7
  196. data/lib/datadog/core/utils.rb +1 -24
  197. data/lib/datadog/core/vendor/ipaddr.rb +78 -0
  198. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
  199. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -4
  200. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
  201. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
  202. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
  203. data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
  204. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -5
  205. data/lib/datadog/core/worker.rb +0 -2
  206. data/lib/datadog/core/workers/async.rb +1 -5
  207. data/lib/datadog/core/workers/interval_loop.rb +0 -2
  208. data/lib/datadog/core/workers/polling.rb +2 -4
  209. data/lib/datadog/core/workers/queue.rb +0 -2
  210. data/lib/datadog/core/workers/runtime_metrics.rb +4 -6
  211. data/lib/datadog/core.rb +21 -56
  212. data/lib/datadog/kit/appsec/events.rb +74 -0
  213. data/lib/datadog/kit/enable_core_dumps.rb +6 -6
  214. data/lib/datadog/kit/identity.rb +15 -8
  215. data/lib/datadog/kit.rb +1 -3
  216. data/lib/datadog/opentelemetry/api/context.rb +186 -0
  217. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  218. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  219. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  220. data/lib/datadog/opentelemetry/sdk/propagator.rb +90 -0
  221. data/lib/datadog/opentelemetry/sdk/span_processor.rb +91 -0
  222. data/lib/datadog/opentelemetry.rb +47 -0
  223. data/lib/datadog/opentracer/binary_propagator.rb +0 -2
  224. data/lib/datadog/opentracer/carrier.rb +0 -2
  225. data/lib/datadog/opentracer/distributed_headers.rb +7 -11
  226. data/lib/datadog/opentracer/global_tracer.rb +0 -2
  227. data/lib/datadog/opentracer/propagator.rb +0 -2
  228. data/lib/datadog/opentracer/rack_propagator.rb +10 -11
  229. data/lib/datadog/opentracer/scope.rb +0 -2
  230. data/lib/datadog/opentracer/scope_manager.rb +0 -2
  231. data/lib/datadog/opentracer/span.rb +1 -3
  232. data/lib/datadog/opentracer/span_context.rb +0 -2
  233. data/lib/datadog/opentracer/span_context_factory.rb +0 -2
  234. data/lib/datadog/opentracer/text_map_propagator.rb +13 -14
  235. data/lib/datadog/opentracer/thread_local_scope.rb +0 -2
  236. data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -3
  237. data/lib/datadog/opentracer/tracer.rb +23 -23
  238. data/lib/datadog/opentracer.rb +16 -18
  239. data/lib/datadog/profiling/backtrace_location.rb +0 -2
  240. data/lib/datadog/profiling/buffer.rb +3 -5
  241. data/lib/datadog/profiling/collectors/code_provenance.rb +0 -2
  242. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +96 -0
  243. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +12 -0
  244. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +66 -0
  245. data/lib/datadog/profiling/collectors/old_stack.rb +16 -13
  246. data/lib/datadog/profiling/collectors/stack.rb +3 -10
  247. data/lib/datadog/profiling/collectors/thread_context.rb +46 -0
  248. data/lib/datadog/profiling/component.rb +161 -0
  249. data/lib/datadog/profiling/encoding/profile.rb +1 -3
  250. data/lib/datadog/profiling/event.rb +0 -2
  251. data/lib/datadog/profiling/events/stack.rb +1 -3
  252. data/lib/datadog/profiling/exporter.rb +23 -14
  253. data/lib/datadog/profiling/ext/forking.rb +36 -39
  254. data/lib/datadog/profiling/ext.rb +1 -2
  255. data/lib/datadog/profiling/flush.rb +0 -5
  256. data/lib/datadog/profiling/http_transport.rb +5 -6
  257. data/lib/datadog/profiling/load_native_extension.rb +0 -2
  258. data/lib/datadog/profiling/native_extension.rb +0 -2
  259. data/lib/datadog/profiling/old_recorder.rb +8 -7
  260. data/lib/datadog/profiling/pprof/builder.rb +4 -6
  261. data/lib/datadog/profiling/pprof/converter.rb +1 -3
  262. data/lib/datadog/profiling/pprof/message_set.rb +1 -3
  263. data/lib/datadog/profiling/pprof/payload.rb +0 -2
  264. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -2
  265. data/lib/datadog/profiling/pprof/stack_sample.rb +4 -6
  266. data/lib/datadog/profiling/pprof/string_table.rb +1 -3
  267. data/lib/datadog/profiling/pprof/template.rb +5 -7
  268. data/lib/datadog/profiling/preload.rb +1 -3
  269. data/lib/datadog/profiling/profiler.rb +7 -2
  270. data/lib/datadog/profiling/scheduler.rb +8 -12
  271. data/lib/datadog/profiling/stack_recorder.rb +49 -8
  272. data/lib/datadog/profiling/tag_builder.rb +5 -2
  273. data/lib/datadog/profiling/tasks/exec.rb +0 -2
  274. data/lib/datadog/profiling/tasks/help.rb +0 -2
  275. data/lib/datadog/profiling/tasks/setup.rb +2 -11
  276. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -4
  277. data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -3
  278. data/lib/datadog/profiling.rb +67 -27
  279. data/lib/datadog/tracing/analytics.rb +1 -3
  280. data/lib/datadog/tracing/buffer.rb +5 -9
  281. data/lib/datadog/tracing/client_ip.rb +61 -0
  282. data/lib/datadog/tracing/component.rb +176 -0
  283. data/lib/datadog/tracing/configuration/ext.rb +49 -6
  284. data/lib/datadog/tracing/configuration/settings.rb +451 -0
  285. data/lib/datadog/tracing/context.rb +1 -3
  286. data/lib/datadog/tracing/context_provider.rb +2 -4
  287. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -4
  288. data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -7
  289. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -6
  290. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -5
  291. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -6
  292. data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -6
  293. data/lib/datadog/tracing/contrib/action_cable/ext.rb +0 -2
  294. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -6
  295. data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -6
  296. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -6
  297. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -4
  298. data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -5
  299. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -5
  300. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -5
  301. data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -4
  302. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +0 -2
  303. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -6
  304. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -5
  305. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +6 -8
  306. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -4
  307. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -4
  308. data/lib/datadog/tracing/contrib/action_pack/ext.rb +0 -2
  309. data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -6
  310. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -4
  311. data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -3
  312. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -4
  313. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -3
  314. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -7
  315. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -7
  316. data/lib/datadog/tracing/contrib/action_view/events.rb +2 -4
  317. data/lib/datadog/tracing/contrib/action_view/ext.rb +0 -2
  318. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -4
  319. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -4
  320. data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -6
  321. data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -9
  322. data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -3
  323. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -5
  324. data/lib/datadog/tracing/contrib/active_job/event.rb +3 -5
  325. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -6
  326. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -6
  327. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -6
  328. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -6
  329. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -6
  330. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -6
  331. data/lib/datadog/tracing/contrib/active_job/events.rb +6 -8
  332. data/lib/datadog/tracing/contrib/active_job/ext.rb +0 -2
  333. data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -6
  334. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -4
  335. data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -6
  336. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -4
  337. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -7
  338. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -5
  339. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -4
  340. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -4
  341. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +0 -2
  342. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -5
  343. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -6
  344. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
  345. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -4
  346. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -5
  347. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -3
  348. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -6
  349. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -8
  350. data/lib/datadog/tracing/contrib/active_record/events.rb +2 -4
  351. data/lib/datadog/tracing/contrib/active_record/ext.rb +0 -2
  352. data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -8
  353. data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -4
  354. data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -4
  355. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
  356. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -11
  357. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -4
  358. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -3
  359. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -4
  360. data/lib/datadog/tracing/contrib/active_support/ext.rb +0 -2
  361. data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -7
  362. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -3
  363. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -3
  364. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +0 -2
  365. data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -4
  366. data/lib/datadog/tracing/contrib/analytics.rb +1 -3
  367. data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -6
  368. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -5
  369. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -2
  370. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -6
  371. data/lib/datadog/tracing/contrib/aws/integration.rb +3 -5
  372. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +0 -2
  373. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -7
  374. data/lib/datadog/tracing/contrib/aws/services.rb +0 -4
  375. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -4
  376. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -2
  377. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +0 -2
  378. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -3
  379. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -5
  380. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -5
  381. data/lib/datadog/tracing/contrib/configurable.rb +2 -4
  382. data/lib/datadog/tracing/contrib/configuration/resolver.rb +0 -2
  383. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -3
  384. data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -6
  385. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -5
  386. data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -2
  387. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +10 -7
  388. data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -5
  389. data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -5
  390. data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -3
  391. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -5
  392. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -2
  393. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -5
  394. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -4
  395. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +11 -6
  396. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
  397. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -5
  398. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  399. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -5
  400. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -9
  401. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -5
  402. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -5
  403. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -9
  404. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -2
  405. data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -6
  406. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -6
  407. data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -6
  408. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -5
  409. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -2
  410. data/lib/datadog/tracing/contrib/excon/integration.rb +4 -6
  411. data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -9
  412. data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -4
  413. data/lib/datadog/tracing/contrib/ext.rb +30 -0
  414. data/lib/datadog/tracing/contrib/extensions.rb +5 -5
  415. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -5
  416. data/lib/datadog/tracing/contrib/faraday/connection.rb +0 -2
  417. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -2
  418. data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -6
  419. data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -10
  420. data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -7
  421. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +0 -2
  422. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -5
  423. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -9
  424. data/lib/datadog/tracing/contrib/grape/ext.rb +0 -2
  425. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
  426. data/lib/datadog/tracing/contrib/grape/integration.rb +3 -5
  427. data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -6
  428. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -5
  429. data/lib/datadog/tracing/contrib/graphql/ext.rb +0 -2
  430. data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -5
  431. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -5
  432. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +9 -6
  433. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -7
  434. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -19
  435. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -6
  436. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
  437. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
  438. data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -2
  439. data/lib/datadog/tracing/contrib/grpc/integration.rb +11 -6
  440. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +0 -2
  441. data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -8
  442. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +45 -0
  443. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +20 -0
  444. data/lib/datadog/tracing/contrib/hanami/ext.rb +22 -0
  445. data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
  446. data/lib/datadog/tracing/contrib/hanami/patcher.rb +31 -0
  447. data/lib/datadog/tracing/contrib/hanami/plugin.rb +21 -0
  448. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +39 -0
  449. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +42 -0
  450. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -4
  451. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -5
  452. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  453. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
  454. data/lib/datadog/tracing/contrib/http/ext.rb +2 -2
  455. data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -12
  456. data/lib/datadog/tracing/contrib/http/integration.rb +6 -8
  457. data/lib/datadog/tracing/contrib/http/patcher.rb +3 -5
  458. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +0 -2
  459. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -5
  460. data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -2
  461. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -11
  462. data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -6
  463. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -5
  464. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -5
  465. data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -2
  466. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -11
  467. data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -6
  468. data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -5
  469. data/lib/datadog/tracing/contrib/integration.rb +3 -5
  470. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -4
  471. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -2
  472. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +0 -2
  473. data/lib/datadog/tracing/contrib/kafka/event.rb +4 -5
  474. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -4
  475. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -5
  476. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -5
  477. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -6
  478. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -6
  479. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -6
  480. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -6
  481. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -4
  482. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -4
  483. data/lib/datadog/tracing/contrib/kafka/events.rb +9 -11
  484. data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -2
  485. data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -5
  486. data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -5
  487. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -4
  488. data/lib/datadog/tracing/contrib/lograge/ext.rb +0 -2
  489. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -4
  490. data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -5
  491. data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -4
  492. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -5
  493. data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -2
  494. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -5
  495. data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -6
  496. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -3
  497. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -5
  498. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -6
  499. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -4
  500. data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -2
  501. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -7
  502. data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -5
  503. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -4
  504. data/lib/datadog/tracing/contrib/patchable.rb +0 -2
  505. data/lib/datadog/tracing/contrib/patcher.rb +16 -6
  506. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +17 -4
  507. data/lib/datadog/tracing/contrib/pg/ext.rb +3 -3
  508. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +78 -41
  509. data/lib/datadog/tracing/contrib/pg/integration.rb +3 -5
  510. data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -4
  511. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -5
  512. data/lib/datadog/tracing/contrib/presto/ext.rb +2 -2
  513. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +5 -5
  514. data/lib/datadog/tracing/contrib/presto/integration.rb +3 -5
  515. data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -6
  516. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  517. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +31 -0
  518. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +26 -0
  519. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +45 -0
  520. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -4
  521. data/lib/datadog/tracing/contrib/qless/ext.rb +0 -2
  522. data/lib/datadog/tracing/contrib/qless/integration.rb +3 -5
  523. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -5
  524. data/lib/datadog/tracing/contrib/qless/qless_job.rb +5 -5
  525. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -4
  526. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -5
  527. data/lib/datadog/tracing/contrib/que/ext.rb +0 -2
  528. data/lib/datadog/tracing/contrib/que/integration.rb +4 -6
  529. data/lib/datadog/tracing/contrib/que/patcher.rb +1 -3
  530. data/lib/datadog/tracing/contrib/que/tracer.rb +5 -3
  531. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -4
  532. data/lib/datadog/tracing/contrib/racecar/event.rb +5 -7
  533. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -5
  534. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -4
  535. data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -5
  536. data/lib/datadog/tracing/contrib/racecar/events.rb +3 -5
  537. data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -2
  538. data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -5
  539. data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -5
  540. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -4
  541. data/lib/datadog/tracing/contrib/rack/ext.rb +5 -2
  542. data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
  543. data/lib/datadog/tracing/contrib/rack/integration.rb +4 -6
  544. data/lib/datadog/tracing/contrib/rack/middlewares.rb +170 -78
  545. data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -4
  546. data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
  547. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -3
  548. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -3
  549. data/lib/datadog/tracing/contrib/rails/ext.rb +0 -2
  550. data/lib/datadog/tracing/contrib/rails/framework.rb +16 -23
  551. data/lib/datadog/tracing/contrib/rails/integration.rb +4 -6
  552. data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -4
  553. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -4
  554. data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -10
  555. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
  556. data/lib/datadog/tracing/contrib/rails/utils.rb +1 -3
  557. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +16 -3
  558. data/lib/datadog/tracing/contrib/rake/ext.rb +0 -2
  559. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -9
  560. data/lib/datadog/tracing/contrib/rake/integration.rb +3 -5
  561. data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -6
  562. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -3
  563. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -5
  564. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  565. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -28
  566. data/lib/datadog/tracing/contrib/redis/integration.rb +37 -6
  567. data/lib/datadog/tracing/contrib/redis/patcher.rb +56 -14
  568. data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
  569. data/lib/datadog/tracing/contrib/redis/tags.rb +12 -12
  570. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +70 -0
  571. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
  572. data/lib/datadog/tracing/contrib/registerable.rb +0 -2
  573. data/lib/datadog/tracing/contrib/registry.rb +0 -2
  574. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -5
  575. data/lib/datadog/tracing/contrib/resque/ext.rb +0 -2
  576. data/lib/datadog/tracing/contrib/resque/integration.rb +3 -5
  577. data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -4
  578. data/lib/datadog/tracing/contrib/resque/resque_job.rb +7 -6
  579. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +8 -5
  580. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -2
  581. data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -5
  582. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -5
  583. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +6 -7
  584. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -4
  585. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +0 -2
  586. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -4
  587. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -5
  588. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -4
  589. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -4
  590. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -7
  591. data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -7
  592. data/lib/datadog/tracing/contrib/sequel/ext.rb +0 -2
  593. data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -5
  594. data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -5
  595. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -4
  596. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -5
  597. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -2
  598. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -6
  599. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -3
  600. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -3
  601. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +11 -7
  602. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -5
  603. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -2
  604. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -5
  605. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -9
  606. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +23 -3
  607. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +2 -2
  608. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +7 -8
  609. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +55 -0
  610. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +12 -8
  611. data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -4
  612. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -4
  613. data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -27
  614. data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -5
  615. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -4
  616. data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -3
  617. data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -5
  618. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +6 -9
  619. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -90
  620. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -18
  621. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -4
  622. data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -2
  623. data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -6
  624. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -4
  625. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +7 -5
  626. data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -4
  627. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
  628. data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
  629. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  630. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  631. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  632. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -4
  633. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +0 -2
  634. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +0 -2
  635. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -6
  636. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -5
  637. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -8
  638. data/lib/datadog/tracing/contrib/utils/database.rb +0 -2
  639. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
  640. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
  641. data/lib/datadog/tracing/contrib.rb +50 -50
  642. data/lib/datadog/tracing/correlation.rb +16 -4
  643. data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -8
  644. data/lib/datadog/tracing/diagnostics/health.rb +38 -0
  645. data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
  646. data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
  647. data/lib/datadog/tracing/distributed/datadog.rb +200 -0
  648. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  649. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  650. data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
  651. data/lib/datadog/tracing/distributed/helpers.rb +27 -40
  652. data/lib/datadog/tracing/distributed/none.rb +18 -0
  653. data/lib/datadog/tracing/distributed/propagation.rb +126 -0
  654. data/lib/datadog/tracing/distributed/trace_context.rb +373 -0
  655. data/lib/datadog/tracing/event.rb +1 -3
  656. data/lib/datadog/tracing/flush.rb +57 -37
  657. data/lib/datadog/tracing/metadata/analytics.rb +2 -4
  658. data/lib/datadog/tracing/metadata/errors.rb +2 -4
  659. data/lib/datadog/tracing/metadata/ext.rb +18 -12
  660. data/lib/datadog/tracing/metadata/tagging.rb +17 -4
  661. data/lib/datadog/tracing/metadata.rb +3 -5
  662. data/lib/datadog/tracing/pipeline/span_filter.rb +10 -8
  663. data/lib/datadog/tracing/pipeline/span_processor.rb +0 -2
  664. data/lib/datadog/tracing/pipeline.rb +3 -5
  665. data/lib/datadog/tracing/propagation/http.rb +3 -100
  666. data/lib/datadog/tracing/runtime/metrics.rb +1 -3
  667. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -3
  668. data/lib/datadog/tracing/sampling/ext.rb +30 -1
  669. data/lib/datadog/tracing/sampling/matcher.rb +0 -2
  670. data/lib/datadog/tracing/sampling/priority_sampler.rb +62 -11
  671. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -13
  672. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -10
  673. data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -3
  674. data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -12
  675. data/lib/datadog/tracing/sampling/rule.rb +3 -5
  676. data/lib/datadog/tracing/sampling/rule_sampler.rb +8 -9
  677. data/lib/datadog/tracing/sampling/sampler.rb +0 -2
  678. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  679. data/lib/datadog/tracing/sampling/span/matcher.rb +9 -0
  680. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  681. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  682. data/lib/datadog/tracing/sampling/span/sampler.rb +75 -0
  683. data/lib/datadog/tracing/span.rb +6 -24
  684. data/lib/datadog/tracing/span_operation.rb +11 -14
  685. data/lib/datadog/tracing/sync_writer.rb +5 -7
  686. data/lib/datadog/tracing/trace_digest.rb +88 -4
  687. data/lib/datadog/tracing/trace_operation.rb +60 -17
  688. data/lib/datadog/tracing/trace_segment.rb +20 -10
  689. data/lib/datadog/tracing/tracer.rb +49 -23
  690. data/lib/datadog/tracing/utils.rb +81 -0
  691. data/lib/datadog/tracing/workers/trace_writer.rb +9 -11
  692. data/lib/datadog/tracing/workers.rb +3 -5
  693. data/lib/datadog/tracing/writer.rb +12 -7
  694. data/lib/datadog/tracing.rb +8 -10
  695. data/lib/ddtrace/auto_instrument.rb +9 -4
  696. data/lib/ddtrace/auto_instrument_base.rb +0 -2
  697. data/lib/ddtrace/profiling/preload.rb +0 -2
  698. data/lib/ddtrace/transport/ext.rb +7 -3
  699. data/lib/ddtrace/transport/http/adapters/net.rb +3 -4
  700. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -2
  701. data/lib/ddtrace/transport/http/adapters/test.rb +1 -3
  702. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
  703. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -2
  704. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -2
  705. data/lib/ddtrace/transport/http/api/instance.rb +0 -2
  706. data/lib/ddtrace/transport/http/api/map.rb +1 -3
  707. data/lib/ddtrace/transport/http/api/spec.rb +0 -2
  708. data/lib/ddtrace/transport/http/api.rb +4 -6
  709. data/lib/ddtrace/transport/http/builder.rb +5 -7
  710. data/lib/ddtrace/transport/http/client.rb +2 -4
  711. data/lib/ddtrace/transport/http/env.rb +0 -2
  712. data/lib/ddtrace/transport/http/response.rb +1 -3
  713. data/lib/ddtrace/transport/http/statistics.rb +1 -3
  714. data/lib/ddtrace/transport/http/traces.rb +6 -8
  715. data/lib/ddtrace/transport/http.rb +11 -12
  716. data/lib/ddtrace/transport/io/client.rb +2 -4
  717. data/lib/ddtrace/transport/io/response.rb +1 -3
  718. data/lib/ddtrace/transport/io/traces.rb +3 -7
  719. data/lib/ddtrace/transport/io.rb +3 -5
  720. data/lib/ddtrace/transport/parcel.rb +0 -4
  721. data/lib/ddtrace/transport/request.rb +0 -2
  722. data/lib/ddtrace/transport/response.rb +0 -2
  723. data/lib/ddtrace/transport/serializable_trace.rb +9 -5
  724. data/lib/ddtrace/transport/statistics.rb +2 -4
  725. data/lib/ddtrace/transport/trace_formatter.rb +21 -12
  726. data/lib/ddtrace/transport/traces.rb +9 -9
  727. data/lib/ddtrace/version.rb +2 -4
  728. data/lib/ddtrace.rb +6 -10
  729. metadata +131 -50
  730. data/.editorconfig +0 -22
  731. data/.gitignore +0 -58
  732. data/CONTRIBUTING.md +0 -81
  733. data/ddtrace.gemspec +0 -71
  734. data/docs/0.x-trace.png +0 -0
  735. data/docs/1.0-trace.png +0 -0
  736. data/docs/AutoInstrumentation.md +0 -36
  737. data/docs/Deprecation.md +0 -8
  738. data/docs/DevelopmentGuide.md +0 -259
  739. data/docs/GettingStarted.md +0 -2712
  740. data/docs/ProfilingDevelopment.md +0 -109
  741. data/docs/PublicApi.md +0 -14
  742. data/docs/UpgradeGuide.md +0 -736
  743. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -269
  744. data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +0 -13
  745. data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
  746. data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
  747. data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
  748. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -42
  749. data/lib/datadog/profiling/old_ext.rb +0 -42
  750. data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
  751. data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
  752. data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
  753. data/lib/datadog/profiling/transport/http/api.rb +0 -45
  754. data/lib/datadog/profiling/transport/http/builder.rb +0 -30
  755. data/lib/datadog/profiling/transport/http/client.rb +0 -37
  756. data/lib/datadog/profiling/transport/http/response.rb +0 -21
  757. data/lib/datadog/profiling/transport/http.rb +0 -112
  758. data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
  759. data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
  760. data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
  761. data/lib/datadog/tracing/distributed/headers/parser.rb +0 -37
  762. data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
  763. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
  764. data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
  765. data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
  766. data/lib/datadog/tracing/propagation/grpc.rb +0 -98
@@ -1,58 +0,0 @@
1
- # typed: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rack
7
- # Normalized extration of data from Rack::Request
8
- module Request
9
- def self.query(request)
10
- # Downstream libddwaf expects keys and values to be extractable
11
- # separately so we can't use [[k, v], ...]. We also want to allow
12
- # duplicate keys, so we use [{k, v}, ...] instead.
13
- request.query_string.split('&').map do |e|
14
- k, v = e.split('=').map { |s| CGI.unescape(s) }
15
-
16
- { k => v }
17
- end
18
- end
19
-
20
- # Rack < 2.0 does not have :each_header
21
- # TODO: We need access to Rack here. We must make sure we are able to load AppSec without Rack,
22
- # TODO: while still ensure correctness in ths code path.
23
- if defined?(::Rack) && ::Rack::Request.instance_methods.include?(:each_header)
24
- def self.headers(request)
25
- request.each_header.each_with_object({}) do |(k, v), h|
26
- h[k.gsub(/^HTTP_/, '').downcase.tr('_', '-')] = v if k =~ /^HTTP_/
27
- end
28
- end
29
- else
30
- def self.headers(request)
31
- request.env.each_with_object({}) do |(k, v), h|
32
- h[k.gsub(/^HTTP_/, '').downcase.tr('_', '-')] = v if k =~ /^HTTP_/
33
- end
34
- end
35
- end
36
-
37
- def self.body(request)
38
- request.body.read.tap { request.body.rewind }
39
- end
40
-
41
- def self.url(request)
42
- request.url
43
- end
44
-
45
- def self.cookies(request)
46
- request.cookies
47
- end
48
-
49
- def self.form_hash(request)
50
- # usually Hash<String,String> but can be a more complex
51
- # Hash<String,String||Array||Hash> when e.g coming from JSON
52
- request.env['rack.request.form_hash']
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,24 +0,0 @@
1
- # typed: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Rack
7
- # Normalized extration of data from Rack::Response
8
- module Response
9
- def self.headers(response)
10
- response.headers.each_with_object({}) { |(k, v), h| h[k.downcase] = v }
11
- end
12
-
13
- def self.cookies(response)
14
- response.cookies
15
- end
16
-
17
- def self.status(response)
18
- response.status
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,42 +0,0 @@
1
- # typed: false
2
-
3
- module Datadog
4
- module Profiling
5
- module Collectors
6
- # Used to periodically (time-based) sample threads, recording elapsed CPU-time and Wall-time between samples.
7
- # The stack collection itself is handled using the Datadog::Profiling::Collectors::Stack.
8
- #
9
- # Methods prefixed with _native_ are implemented in `collectors_cpu_and_wall_time.c`
10
- class CpuAndWallTime
11
- def initialize(recorder:, max_frames:)
12
- self.class._native_initialize(self, recorder, max_frames)
13
- end
14
-
15
- # This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
16
- # It SHOULD NOT be used for other purposes.
17
- def sample
18
- self.class._native_sample(self)
19
- end
20
-
21
- # This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
22
- # It SHOULD NOT be used for other purposes.
23
- def thread_list
24
- self.class._native_thread_list
25
- end
26
-
27
- # This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
28
- # It SHOULD NOT be used for other purposes.
29
- def per_thread_context
30
- self.class._native_per_thread_context(self)
31
- end
32
-
33
- def inspect
34
- # Compose Ruby's default inspect with our custom inspect for the native parts
35
- result = super()
36
- result[-1] = "#{self.class._native_inspect(self)}>"
37
- result
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,42 +0,0 @@
1
- # typed: true
2
-
3
- module Datadog
4
- module Profiling
5
- # NOTE: This OldExt file is temporary and expected to be removed once the migration to the new `HttpTransport` class
6
- # is complete
7
- module OldExt
8
- module Transport
9
- module HTTP
10
- URI_TEMPLATE_DD_API = 'https://intake.profile.%s/'.freeze
11
-
12
- FORM_FIELD_RECORDING_START = 'start'.freeze
13
- FORM_FIELD_RECORDING_END = 'end'.freeze
14
- FORM_FIELD_FAMILY = 'family'.freeze
15
- FORM_FIELD_TAG_ENV = 'env'.freeze
16
- FORM_FIELD_TAG_HOST = 'host'.freeze
17
- FORM_FIELD_TAG_LANGUAGE = 'language'.freeze
18
- FORM_FIELD_TAG_PID = 'process_id'.freeze
19
- FORM_FIELD_TAG_PROFILER_VERSION = 'profiler_version'.freeze
20
- FORM_FIELD_TAG_RUNTIME = 'runtime'.freeze
21
- FORM_FIELD_TAG_RUNTIME_ENGINE = 'runtime_engine'.freeze
22
- FORM_FIELD_TAG_RUNTIME_ID = 'runtime-id'.freeze
23
- FORM_FIELD_TAG_RUNTIME_PLATFORM = 'runtime_platform'.freeze
24
- FORM_FIELD_TAG_RUNTIME_VERSION = 'runtime_version'.freeze
25
- FORM_FIELD_TAG_SERVICE = 'service'.freeze
26
- FORM_FIELD_TAG_VERSION = 'version'.freeze
27
- FORM_FIELD_TAGS = 'tags'.freeze
28
- FORM_FIELD_INTAKE_VERSION = 'version'.freeze
29
-
30
- HEADER_CONTENT_TYPE = 'Content-Type'.freeze
31
- HEADER_CONTENT_TYPE_OCTET_STREAM = 'application/octet-stream'.freeze
32
-
33
- FORM_FIELD_PPROF_DATA = 'data[rubyprofile.pprof]'.freeze
34
- PPROF_DEFAULT_FILENAME = 'rubyprofile.pprof.gz'.freeze
35
-
36
- FORM_FIELD_CODE_PROVENANCE_DATA = 'data[code-provenance.json]'.freeze
37
- CODE_PROVENANCE_FILENAME = 'code-provenance.json.gz'.freeze
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,85 +0,0 @@
1
- # typed: true
2
-
3
- require 'datadog/core/utils/compression'
4
- require 'datadog/core/vendor/multipart-post/multipart/post/composite_read_io'
5
- require 'datadog/profiling/old_ext'
6
- require 'datadog/profiling/transport/http/response'
7
- require 'ddtrace/transport/http/api/endpoint'
8
-
9
- module Datadog
10
- module Profiling
11
- module Transport
12
- module HTTP
13
- module API
14
- # Datadog API endpoint for profiling
15
- class Endpoint < Datadog::Transport::HTTP::API::Endpoint
16
- include Profiling::OldExt::Transport::HTTP
17
-
18
- # These tags are read from the flush object (see below) directly and so we ignore any extra copies that
19
- # may come in the tags hash to avoid duplicates.
20
- TAGS_TO_IGNORE_IN_TAGS_HASH = %w[service env version].freeze
21
- private_constant :TAGS_TO_IGNORE_IN_TAGS_HASH
22
-
23
- attr_reader \
24
- :encoder
25
-
26
- def initialize(path, encoder = nil)
27
- super(:post, path)
28
- @encoder = encoder
29
- end
30
-
31
- def call(env, &block)
32
- # Build request
33
- env.form = build_form(env)
34
-
35
- # Send request
36
- http_response = super(env, &block)
37
-
38
- # Build response
39
- Profiling::Transport::HTTP::Response.new(http_response)
40
- end
41
-
42
- def build_form(env)
43
- flush = env.request
44
- pprof_file = build_pprof(flush)
45
-
46
- form = {
47
- FORM_FIELD_INTAKE_VERSION => '3', # Aka 1.3 intake format
48
- FORM_FIELD_RECORDING_START => flush.start.utc.iso8601,
49
- FORM_FIELD_RECORDING_END => flush.finish.utc.iso8601,
50
- FORM_FIELD_TAGS => flush.tags_as_array.map { |key, value| "#{key}:#{value}" },
51
- FORM_FIELD_PPROF_DATA => pprof_file,
52
- FORM_FIELD_FAMILY => 'ruby',
53
- }
54
-
55
- # May not be available/enabled
56
- form[FORM_FIELD_CODE_PROVENANCE_DATA] = build_code_provenance(flush) if flush.code_provenance_data
57
-
58
- form
59
- end
60
-
61
- def build_pprof(flush)
62
- gzipped_pprof_data = flush.pprof_data
63
-
64
- Core::Vendor::Multipart::Post::UploadIO.new(
65
- StringIO.new(gzipped_pprof_data),
66
- HEADER_CONTENT_TYPE_OCTET_STREAM,
67
- PPROF_DEFAULT_FILENAME
68
- )
69
- end
70
-
71
- def build_code_provenance(flush)
72
- gzipped_code_provenance = flush.code_provenance_data
73
-
74
- Core::Vendor::Multipart::Post::UploadIO.new(
75
- StringIO.new(gzipped_code_provenance),
76
- HEADER_CONTENT_TYPE_OCTET_STREAM,
77
- CODE_PROVENANCE_FILENAME,
78
- )
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,38 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/api/instance'
4
- require 'datadog/profiling/transport/http/api/spec'
5
-
6
- module Datadog
7
- module Profiling
8
- module Transport
9
- module HTTP
10
- module API
11
- # API instance for profiling
12
- class Instance < Datadog::Transport::HTTP::API::Instance
13
- def send_profiling_flush(env)
14
- raise ProfilesNotSupportedError, spec unless spec.is_a?(Spec)
15
-
16
- spec.send_profiling_flush(env) do |request_env|
17
- call(request_env)
18
- end
19
- end
20
-
21
- # Raised when profiles sent to API that does not support profiles
22
- class ProfilesNotSupportedError < StandardError
23
- attr_reader :spec
24
-
25
- def initialize(spec)
26
- @spec = spec
27
- end
28
-
29
- def message
30
- 'Profiles not supported for this API!'
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,42 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/api/spec'
4
-
5
- module Datadog
6
- module Profiling
7
- module Transport
8
- module HTTP
9
- module API
10
- # API specification for profiling
11
- class Spec < Datadog::Transport::HTTP::API::Spec
12
- attr_accessor \
13
- :profiles
14
-
15
- def send_profiling_flush(env, &block)
16
- raise NoProfilesEndpointDefinedError, self if profiles.nil?
17
-
18
- profiles.call(env, &block)
19
- end
20
-
21
- def encoder
22
- profiles.encoder
23
- end
24
-
25
- # Raised when profiles sent but no profiles endpoint is defined
26
- class NoProfilesEndpointDefinedError < StandardError
27
- attr_reader :spec
28
-
29
- def initialize(spec)
30
- @spec = spec
31
- end
32
-
33
- def message
34
- 'No profiles endpoint is defined for API specification!'
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,45 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/api/map'
4
- require 'datadog/profiling/encoding/profile'
5
- require 'datadog/profiling/transport/http/api/spec'
6
- require 'datadog/profiling/transport/http/api/instance'
7
- require 'datadog/profiling/transport/http/api/endpoint'
8
-
9
- module Datadog
10
- module Profiling
11
- module Transport
12
- module HTTP
13
- # Extensions for HTTP API Spec
14
- module API
15
- # Default API versions
16
- V1 = 'v1'.freeze
17
-
18
- module_function
19
-
20
- def agent_defaults
21
- @agent_defaults ||= Datadog::Transport::HTTP::API::Map[
22
- V1 => Spec.new do |s|
23
- s.profiles = Endpoint.new(
24
- '/profiling/v1/input'.freeze,
25
- Profiling::Encoding::Profile::Protobuf
26
- )
27
- end
28
- ]
29
- end
30
-
31
- def api_defaults
32
- @api_defaults ||= Datadog::Transport::HTTP::API::Map[
33
- V1 => Spec.new do |s|
34
- s.profiles = Endpoint.new(
35
- '/v1/input'.freeze,
36
- Profiling::Encoding::Profile::Protobuf
37
- )
38
- end
39
- ]
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,30 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/builder'
4
-
5
- require 'datadog/profiling/transport/http/api'
6
- require 'datadog/profiling/transport/http/client'
7
-
8
- module Datadog
9
- module Profiling
10
- module Transport
11
- module HTTP
12
- # Builds new instances of Transport::HTTP::Client
13
- class Builder < Datadog::Transport::HTTP::Builder
14
- def api_instance_class
15
- API::Instance
16
- end
17
-
18
- def to_transport
19
- raise Datadog::Transport::HTTP::Builder::NoDefaultApiError if @default_api.nil?
20
-
21
- # TODO: Profiling doesn't have multiple APIs yet.
22
- # When it does, we should build it out with these APIs.
23
- # Just use :default_api for now.
24
- Client.new(to_api_instances[@default_api])
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,37 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/client'
4
- require 'ddtrace/transport/request'
5
-
6
- module Datadog
7
- module Profiling
8
- module Transport
9
- module HTTP
10
- # Routes, encodes, and sends tracer data to the trace agent via HTTP.
11
- class Client < Datadog::Transport::HTTP::Client
12
- def export(flush)
13
- send_profiling_flush(flush)
14
- end
15
-
16
- def send_profiling_flush(flush)
17
- # Build a request
18
- request = flush
19
- send_payload(request).tap do |response|
20
- if response.ok?
21
- Datadog.logger.debug('Successfully reported profiling data')
22
- else
23
- Datadog.logger.debug { "Failed to report profiling data -- #{response.inspect}" }
24
- end
25
- end
26
- end
27
-
28
- def send_payload(request)
29
- send_request(request) do |api, env|
30
- api.send_profiling_flush(env)
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,21 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/http/response'
4
-
5
- module Datadog
6
- module Profiling
7
- module Transport
8
- # HTTP transport behavior for profiling
9
- module HTTP
10
- # Response from HTTP transport for profiling
11
- class Response
12
- include Datadog::Transport::HTTP::Response
13
-
14
- def initialize(http_response, options = {})
15
- super(http_response)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,112 +0,0 @@
1
- # typed: true
2
-
3
- require 'datadog/core/environment/ext'
4
- require 'ddtrace/transport/ext'
5
-
6
- require 'datadog/core/environment/container'
7
- require 'datadog/core/environment/variable_helpers'
8
-
9
- require 'datadog/profiling/transport/http/builder'
10
- require 'datadog/profiling/transport/http/api'
11
-
12
- require 'ddtrace/transport/http/adapters/net'
13
- require 'ddtrace/transport/http/adapters/test'
14
- require 'ddtrace/transport/http/adapters/unix_socket'
15
-
16
- module Datadog
17
- module Profiling
18
- module Transport
19
- # Namespace for HTTP transport components
20
- module HTTP
21
- # Builds a new Transport::HTTP::Client
22
- def self.new(&block)
23
- Builder.new(&block).to_transport
24
- end
25
-
26
- # Builds a new Transport::HTTP::Client with default settings
27
- def self.default(
28
- profiling_upload_timeout_seconds:,
29
- agent_settings:,
30
- site: nil,
31
- api_key: nil,
32
- agentless_allowed: agentless_allowed?
33
- )
34
- new do |transport|
35
- transport.headers default_headers
36
-
37
- # Configure adapter & API
38
- if site && api_key && agentless_allowed
39
- configure_for_agentless(
40
- transport,
41
- profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
42
- site: site,
43
- api_key: api_key
44
- )
45
- else
46
- configure_for_agent(
47
- transport,
48
- profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
49
- agent_settings: agent_settings
50
- )
51
- end
52
- end
53
- end
54
-
55
- def self.default_headers
56
- {
57
- Datadog::Transport::Ext::HTTP::HEADER_META_LANG => Core::Environment::Ext::LANG,
58
- Datadog::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Core::Environment::Ext::LANG_VERSION,
59
- Datadog::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER => Core::Environment::Ext::LANG_INTERPRETER,
60
- Datadog::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION => Core::Environment::Ext::TRACER_VERSION
61
- }.tap do |headers|
62
- # Add container ID, if present.
63
- container_id = Core::Environment::Container.container_id
64
- headers[Datadog::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
65
- end
66
- end
67
-
68
- private_class_method def self.configure_for_agent(transport, profiling_upload_timeout_seconds:, agent_settings:)
69
- apis = API.agent_defaults
70
-
71
- transport.adapter(agent_settings.merge(timeout_seconds: profiling_upload_timeout_seconds))
72
- transport.api(API::V1, apis[API::V1], default: true)
73
-
74
- # NOTE: This proc, when it exists, usually overrides the transport specified above
75
- if agent_settings.deprecated_for_removal_transport_configuration_proc
76
- agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
77
- end
78
- end
79
-
80
- private_class_method def self.configure_for_agentless(transport, profiling_upload_timeout_seconds:, site:, api_key:)
81
- apis = API.api_defaults
82
-
83
- site_uri = URI(format(Profiling::OldExt::Transport::HTTP::URI_TEMPLATE_DD_API, site))
84
- hostname = site_uri.host
85
- port = site_uri.port
86
-
87
- transport.adapter(
88
- Datadog::Transport::Ext::HTTP::ADAPTER,
89
- hostname,
90
- port,
91
- timeout: profiling_upload_timeout_seconds,
92
- ssl: site_uri.scheme == 'https'
93
- )
94
- transport.api(API::V1, apis[API::V1], default: true)
95
- transport.headers(Datadog::Transport::Ext::HTTP::HEADER_DD_API_KEY => api_key)
96
- end
97
-
98
- private_class_method def self.agentless_allowed?
99
- Core::Environment::VariableHelpers.env_to_bool(Profiling::Ext::ENV_AGENTLESS, false)
100
- end
101
-
102
- # Add adapters to registry
103
- Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Net,
104
- Datadog::Transport::Ext::HTTP::ADAPTER)
105
- Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Test,
106
- Datadog::Transport::Ext::Test::ADAPTER)
107
- Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::UnixSocket,
108
- Datadog::Transport::Ext::UnixSocket::ADAPTER)
109
- end
110
- end
111
- end
112
- end
@@ -1,55 +0,0 @@
1
- # typed: true
2
-
3
- require 'datadog/tracing/distributed/headers/parser'
4
- require 'datadog/tracing/distributed/helpers'
5
- require 'datadog/tracing/distributed/headers/ext'
6
- require 'datadog/tracing/trace_digest'
7
-
8
- module Datadog
9
- module Tracing
10
- module Distributed
11
- module Headers
12
- # B3 provides helpers to inject or extract headers for B3 style headers
13
- module B3
14
- include Ext
15
-
16
- def self.inject!(digest, env)
17
- return if digest.nil?
18
-
19
- # DEV: We need these to be hex encoded
20
- env[B3_HEADER_TRACE_ID] = digest.trace_id.to_s(16)
21
- env[B3_HEADER_SPAN_ID] = digest.span_id.to_s(16)
22
-
23
- if digest.trace_sampling_priority
24
- sampling_priority = Helpers.clamp_sampling_priority(
25
- digest.trace_sampling_priority
26
- )
27
- env[B3_HEADER_SAMPLED] = sampling_priority.to_s
28
- end
29
-
30
- env
31
- end
32
-
33
- def self.extract(env)
34
- # Extract values from headers
35
- # DEV: B3 doesn't have "origin"
36
- headers = Parser.new(env)
37
- trace_id = headers.id(B3_HEADER_TRACE_ID, 16)
38
- span_id = headers.id(B3_HEADER_SPAN_ID, 16)
39
- # We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
40
- sampling_priority = headers.number(B3_HEADER_SAMPLED)
41
-
42
- # Return early if this propagation is not valid
43
- return unless trace_id && span_id
44
-
45
- TraceDigest.new(
46
- trace_id: trace_id,
47
- span_id: span_id,
48
- trace_sampling_priority: sampling_priority
49
- )
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end