ddtrace 1.4.2 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +986 -2
  3. data/LICENSE-3rdparty.csv +2 -0
  4. data/README.md +10 -12
  5. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +9 -2
  6. data/ext/ddtrace_profiling_loader/extconf.rb +21 -3
  7. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +48 -12
  8. data/ext/ddtrace_profiling_native_extension/clock_id.h +1 -3
  9. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +6 -23
  10. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +0 -1
  11. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +719 -129
  12. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +150 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +18 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.c +156 -0
  15. data/ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.h +5 -0
  16. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +244 -0
  17. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  18. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +184 -94
  19. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +20 -2
  20. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +1301 -0
  21. data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +15 -0
  22. data/ext/ddtrace_profiling_native_extension/extconf.rb +103 -28
  23. data/ext/ddtrace_profiling_native_extension/heap_recorder.c +970 -0
  24. data/ext/ddtrace_profiling_native_extension/heap_recorder.h +155 -0
  25. data/ext/ddtrace_profiling_native_extension/helpers.h +7 -0
  26. data/ext/ddtrace_profiling_native_extension/http_transport.c +133 -88
  27. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.c +62 -0
  28. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +32 -4
  29. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +55 -26
  30. data/ext/ddtrace_profiling_native_extension/pid_controller.c +57 -0
  31. data/ext/ddtrace_profiling_native_extension/pid_controller.h +45 -0
  32. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +317 -131
  33. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +25 -1
  34. data/ext/ddtrace_profiling_native_extension/profiling.c +219 -4
  35. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +233 -1
  36. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +60 -8
  37. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
  38. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
  39. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +585 -66
  40. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +19 -30
  41. data/ext/ddtrace_profiling_native_extension/time_helpers.c +53 -0
  42. data/ext/ddtrace_profiling_native_extension/time_helpers.h +24 -0
  43. data/lib/datadog/appsec/assets/blocked.html +98 -3
  44. data/lib/datadog/appsec/assets/blocked.json +1 -0
  45. data/lib/datadog/appsec/assets/blocked.text +5 -0
  46. data/lib/datadog/appsec/assets/waf_rules/processors.json +92 -0
  47. data/lib/datadog/appsec/assets/waf_rules/recommended.json +2861 -796
  48. data/lib/datadog/appsec/assets/waf_rules/scanners.json +114 -0
  49. data/lib/datadog/appsec/assets/waf_rules/strict.json +459 -122
  50. data/lib/datadog/appsec/assets.rb +10 -4
  51. data/lib/datadog/appsec/autoload.rb +4 -11
  52. data/lib/datadog/appsec/component.rb +94 -0
  53. data/lib/datadog/appsec/configuration/settings.rb +170 -162
  54. data/lib/datadog/appsec/configuration.rb +1 -70
  55. data/lib/datadog/appsec/contrib/auto_instrument.rb +3 -5
  56. data/lib/datadog/appsec/contrib/devise/event.rb +57 -0
  57. data/lib/datadog/appsec/contrib/devise/ext.rb +13 -0
  58. data/lib/datadog/appsec/contrib/devise/integration.rb +42 -0
  59. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +76 -0
  60. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +54 -0
  61. data/lib/datadog/appsec/contrib/devise/patcher.rb +45 -0
  62. data/lib/datadog/appsec/contrib/devise/resource.rb +35 -0
  63. data/lib/datadog/appsec/contrib/devise/tracking.rb +49 -0
  64. data/lib/datadog/appsec/contrib/integration.rb +1 -1
  65. data/lib/datadog/appsec/contrib/patcher.rb +1 -1
  66. data/lib/datadog/appsec/contrib/rack/ext.rb +1 -3
  67. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +104 -0
  68. data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
  69. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +112 -121
  70. data/lib/datadog/appsec/contrib/rack/integration.rb +0 -7
  71. data/lib/datadog/appsec/contrib/rack/patcher.rb +3 -1
  72. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +33 -39
  73. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +19 -23
  74. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +25 -23
  75. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +11 -8
  76. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +122 -41
  77. data/lib/datadog/appsec/contrib/rails/ext.rb +2 -4
  78. data/lib/datadog/appsec/contrib/rails/framework.rb +2 -16
  79. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
  80. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +40 -52
  81. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -8
  82. data/lib/datadog/appsec/contrib/rails/patcher.rb +23 -20
  83. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +21 -23
  84. data/lib/datadog/appsec/contrib/rails/request.rb +4 -1
  85. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
  86. data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -3
  87. data/lib/datadog/appsec/contrib/sinatra/framework.rb +2 -16
  88. data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
  89. data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
  90. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +78 -87
  91. data/lib/datadog/appsec/contrib/sinatra/integration.rb +0 -7
  92. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -15
  93. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +19 -21
  94. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
  95. data/lib/datadog/appsec/event.rb +98 -50
  96. data/lib/datadog/appsec/ext.rb +10 -0
  97. data/lib/datadog/appsec/extensions.rb +2 -105
  98. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +22 -0
  99. data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
  100. data/lib/datadog/appsec/instrumentation.rb +9 -0
  101. data/lib/datadog/appsec/monitor/gateway/watcher.rb +67 -0
  102. data/lib/datadog/appsec/monitor/reactive/set_user.rb +58 -0
  103. data/lib/datadog/appsec/monitor.rb +11 -0
  104. data/lib/datadog/appsec/processor/actions.rb +49 -0
  105. data/lib/datadog/appsec/processor/rule_loader.rb +123 -0
  106. data/lib/datadog/appsec/processor/rule_merger.rb +152 -0
  107. data/lib/datadog/appsec/processor.rb +68 -61
  108. data/lib/datadog/appsec/rate_limiter.rb +1 -3
  109. data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
  110. data/lib/datadog/appsec/reactive/engine.rb +10 -7
  111. data/lib/datadog/appsec/reactive/operation.rb +19 -2
  112. data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
  113. data/lib/datadog/appsec/remote.rb +129 -0
  114. data/lib/datadog/appsec/response.rb +151 -0
  115. data/lib/datadog/appsec/sample_rate.rb +21 -0
  116. data/lib/datadog/appsec/scope.rb +61 -0
  117. data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
  118. data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
  119. data/lib/datadog/appsec/utils/http.rb +11 -0
  120. data/lib/datadog/appsec/utils.rb +9 -0
  121. data/lib/datadog/appsec.rb +41 -4
  122. data/lib/datadog/core/backport.rb +51 -0
  123. data/lib/datadog/core/buffer/cruby.rb +1 -1
  124. data/lib/datadog/core/buffer/random.rb +1 -1
  125. data/lib/datadog/core/buffer/thread_safe.rb +1 -1
  126. data/lib/datadog/core/chunker.rb +1 -1
  127. data/lib/datadog/core/configuration/agent_settings_resolver.rb +96 -56
  128. data/lib/datadog/core/configuration/base.rb +7 -16
  129. data/lib/datadog/core/configuration/components.rb +40 -296
  130. data/lib/datadog/core/configuration/ext.rb +47 -0
  131. data/lib/datadog/core/configuration/option.rb +270 -22
  132. data/lib/datadog/core/configuration/option_definition.rb +81 -31
  133. data/lib/datadog/core/configuration/options.rb +26 -16
  134. data/lib/datadog/core/configuration/settings.rb +419 -305
  135. data/lib/datadog/core/configuration.rb +10 -6
  136. data/lib/datadog/core/diagnostics/environment_logger.rb +129 -230
  137. data/lib/datadog/core/diagnostics/health.rb +4 -22
  138. data/lib/datadog/core/encoding.rb +0 -4
  139. data/lib/datadog/core/environment/cgroup.rb +0 -4
  140. data/lib/datadog/core/environment/class_count.rb +1 -1
  141. data/lib/datadog/core/environment/container.rb +0 -4
  142. data/lib/datadog/core/environment/execution.rb +103 -0
  143. data/lib/datadog/core/environment/ext.rb +12 -12
  144. data/lib/datadog/core/environment/gc.rb +1 -1
  145. data/lib/datadog/core/environment/identity.rb +57 -1
  146. data/lib/datadog/core/environment/platform.rb +0 -2
  147. data/lib/datadog/core/environment/socket.rb +1 -1
  148. data/lib/datadog/core/environment/thread_count.rb +1 -1
  149. data/lib/datadog/core/environment/variable_helpers.rb +29 -44
  150. data/lib/datadog/core/environment/vm_cache.rb +18 -1
  151. data/lib/datadog/core/environment/yjit.rb +58 -0
  152. data/lib/datadog/core/error.rb +1 -2
  153. data/lib/datadog/core/extensions.rb +1 -1
  154. data/lib/datadog/core/git/ext.rb +25 -23
  155. data/lib/datadog/core/header_collection.rb +43 -0
  156. data/lib/datadog/core/logger.rb +0 -2
  157. data/lib/datadog/core/logging/ext.rb +3 -1
  158. data/lib/datadog/core/metrics/client.rb +3 -4
  159. data/lib/datadog/core/metrics/ext.rb +6 -8
  160. data/lib/datadog/core/metrics/helpers.rb +1 -1
  161. data/lib/datadog/core/metrics/logging.rb +0 -2
  162. data/lib/datadog/core/metrics/metric.rb +1 -1
  163. data/lib/datadog/core/metrics/options.rb +0 -2
  164. data/lib/datadog/core/pin.rb +0 -2
  165. data/lib/datadog/core/remote/client/capabilities.rb +62 -0
  166. data/lib/datadog/core/remote/client.rb +232 -0
  167. data/lib/datadog/core/remote/component.rb +149 -0
  168. data/lib/datadog/core/remote/configuration/content.rb +111 -0
  169. data/lib/datadog/core/remote/configuration/digest.rb +62 -0
  170. data/lib/datadog/core/remote/configuration/path.rb +90 -0
  171. data/lib/datadog/core/remote/configuration/repository.rb +294 -0
  172. data/lib/datadog/core/remote/configuration/target.rb +74 -0
  173. data/lib/datadog/core/remote/configuration.rb +18 -0
  174. data/lib/datadog/core/remote/dispatcher.rb +59 -0
  175. data/lib/datadog/core/remote/ext.rb +12 -0
  176. data/lib/datadog/core/remote/negotiation.rb +70 -0
  177. data/lib/datadog/core/remote/transport/config.rb +60 -0
  178. data/lib/datadog/core/remote/transport/http/api/instance.rb +39 -0
  179. data/lib/datadog/core/remote/transport/http/api/spec.rb +21 -0
  180. data/lib/datadog/core/remote/transport/http/api.rb +58 -0
  181. data/lib/datadog/core/remote/transport/http/builder.rb +219 -0
  182. data/lib/datadog/core/remote/transport/http/client.rb +48 -0
  183. data/lib/datadog/core/remote/transport/http/config.rb +280 -0
  184. data/lib/datadog/core/remote/transport/http/negotiation.rb +146 -0
  185. data/lib/datadog/core/remote/transport/http.rb +179 -0
  186. data/lib/datadog/core/remote/transport/negotiation.rb +62 -0
  187. data/lib/datadog/core/remote/worker.rb +99 -0
  188. data/lib/datadog/core/remote.rb +24 -0
  189. data/lib/datadog/core/runtime/ext.rb +21 -11
  190. data/lib/datadog/core/runtime/metrics.rb +64 -7
  191. data/lib/datadog/core/telemetry/client.rb +12 -4
  192. data/lib/datadog/core/telemetry/collector.rb +34 -18
  193. data/lib/datadog/core/telemetry/emitter.rb +4 -4
  194. data/lib/datadog/core/telemetry/event.rb +20 -8
  195. data/lib/datadog/core/telemetry/ext.rb +6 -2
  196. data/lib/datadog/core/telemetry/heartbeat.rb +3 -5
  197. data/lib/datadog/core/telemetry/http/adapters/net.rb +0 -2
  198. data/lib/datadog/core/telemetry/http/env.rb +1 -1
  199. data/lib/datadog/core/telemetry/http/ext.rb +10 -8
  200. data/lib/datadog/core/telemetry/http/response.rb +0 -4
  201. data/lib/datadog/core/telemetry/http/transport.rb +4 -1
  202. data/lib/datadog/core/telemetry/v1/app_event.rb +10 -3
  203. data/lib/datadog/core/telemetry/v1/application.rb +7 -1
  204. data/lib/datadog/core/telemetry/v1/dependency.rb +9 -2
  205. data/lib/datadog/core/telemetry/v1/host.rb +9 -1
  206. data/lib/datadog/core/telemetry/v1/install_signature.rb +38 -0
  207. data/lib/datadog/core/telemetry/v1/integration.rb +7 -1
  208. data/lib/datadog/core/telemetry/v1/product.rb +9 -1
  209. data/lib/datadog/core/telemetry/v1/telemetry_request.rb +7 -1
  210. data/lib/datadog/core/telemetry/v2/app_client_configuration_change.rb +41 -0
  211. data/lib/datadog/core/telemetry/v2/request.rb +29 -0
  212. data/lib/datadog/core/transport/ext.rb +47 -0
  213. data/lib/datadog/core/transport/http/adapters/net.rb +168 -0
  214. data/lib/datadog/core/transport/http/adapters/registry.rb +29 -0
  215. data/lib/datadog/core/transport/http/adapters/test.rb +89 -0
  216. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +83 -0
  217. data/lib/datadog/core/transport/http/api/endpoint.rb +31 -0
  218. data/lib/datadog/core/transport/http/api/fallbacks.rb +26 -0
  219. data/lib/datadog/core/transport/http/api/map.rb +18 -0
  220. data/lib/datadog/core/transport/http/env.rb +62 -0
  221. data/lib/datadog/core/transport/http/response.rb +60 -0
  222. data/lib/datadog/core/transport/parcel.rb +22 -0
  223. data/lib/datadog/core/transport/request.rb +17 -0
  224. data/lib/datadog/core/transport/response.rb +64 -0
  225. data/lib/datadog/core/utils/compression.rb +6 -2
  226. data/lib/datadog/core/utils/duration.rb +52 -0
  227. data/lib/datadog/core/utils/forking.rb +0 -2
  228. data/lib/datadog/core/utils/hash.rb +79 -0
  229. data/lib/datadog/core/utils/network.rb +140 -0
  230. data/lib/datadog/core/utils/only_once.rb +0 -2
  231. data/lib/datadog/core/utils/safe_dup.rb +35 -12
  232. data/lib/datadog/core/utils/sequence.rb +1 -1
  233. data/lib/datadog/core/utils/time.rb +1 -3
  234. data/lib/datadog/core/utils.rb +1 -24
  235. data/lib/datadog/core/vendor/ipaddr.rb +78 -0
  236. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
  237. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +0 -2
  238. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
  239. data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
  240. data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
  241. data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
  242. data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +0 -2
  243. data/lib/datadog/core/worker.rb +1 -1
  244. data/lib/datadog/core/workers/async.rb +7 -6
  245. data/lib/datadog/core/workers/interval_loop.rb +6 -2
  246. data/lib/datadog/core/workers/polling.rb +2 -4
  247. data/lib/datadog/core/workers/queue.rb +1 -1
  248. data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
  249. data/lib/datadog/core.rb +20 -55
  250. data/lib/datadog/kit/appsec/events.rb +169 -0
  251. data/lib/datadog/kit/enable_core_dumps.rb +8 -9
  252. data/lib/datadog/kit/identity.rb +90 -49
  253. data/lib/datadog/kit.rb +1 -1
  254. data/lib/datadog/opentelemetry/api/context.rb +193 -0
  255. data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
  256. data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
  257. data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
  258. data/lib/datadog/opentelemetry/sdk/propagator.rb +91 -0
  259. data/lib/datadog/opentelemetry/sdk/span_processor.rb +134 -0
  260. data/lib/datadog/opentelemetry/sdk/trace/span.rb +167 -0
  261. data/lib/datadog/opentelemetry/trace.rb +58 -0
  262. data/lib/datadog/opentelemetry.rb +48 -0
  263. data/lib/datadog/opentracer/binary_propagator.rb +1 -1
  264. data/lib/datadog/opentracer/carrier.rb +1 -1
  265. data/lib/datadog/opentracer/distributed_headers.rb +7 -11
  266. data/lib/datadog/opentracer/global_tracer.rb +1 -1
  267. data/lib/datadog/opentracer/propagator.rb +1 -1
  268. data/lib/datadog/opentracer/rack_propagator.rb +0 -5
  269. data/lib/datadog/opentracer/scope.rb +1 -1
  270. data/lib/datadog/opentracer/scope_manager.rb +1 -1
  271. data/lib/datadog/opentracer/span.rb +0 -2
  272. data/lib/datadog/opentracer/span_context.rb +1 -1
  273. data/lib/datadog/opentracer/span_context_factory.rb +1 -1
  274. data/lib/datadog/opentracer/text_map_propagator.rb +6 -9
  275. data/lib/datadog/opentracer/thread_local_scope.rb +1 -1
  276. data/lib/datadog/opentracer/thread_local_scope_manager.rb +0 -2
  277. data/lib/datadog/opentracer/tracer.rb +0 -2
  278. data/lib/datadog/opentracer.rb +10 -1
  279. data/lib/datadog/profiling/collectors/code_provenance.rb +0 -2
  280. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +53 -19
  281. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  282. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
  283. data/lib/datadog/profiling/collectors/stack.rb +1 -1
  284. data/lib/datadog/profiling/collectors/thread_context.rb +61 -0
  285. data/lib/datadog/profiling/component.rb +434 -0
  286. data/lib/datadog/profiling/diagnostics/environment_logger.rb +39 -0
  287. data/lib/datadog/profiling/exporter.rb +12 -7
  288. data/lib/datadog/profiling/ext/forking.rb +0 -2
  289. data/lib/datadog/profiling/ext.rb +20 -32
  290. data/lib/datadog/profiling/flush.rb +8 -6
  291. data/lib/datadog/profiling/http_transport.rb +19 -8
  292. data/lib/datadog/profiling/load_native_extension.rb +7 -3
  293. data/lib/datadog/profiling/native_extension.rb +1 -22
  294. data/lib/datadog/profiling/preload.rb +1 -1
  295. data/lib/datadog/profiling/profiler.rb +42 -14
  296. data/lib/datadog/profiling/scheduler.rb +27 -25
  297. data/lib/datadog/profiling/stack_recorder.rb +30 -6
  298. data/lib/datadog/profiling/tag_builder.rb +1 -1
  299. data/lib/datadog/profiling/tasks/exec.rb +0 -2
  300. data/lib/datadog/profiling/tasks/help.rb +0 -2
  301. data/lib/datadog/profiling/tasks/setup.rb +0 -35
  302. data/lib/datadog/profiling.rb +53 -74
  303. data/lib/datadog/tracing/analytics.rb +1 -1
  304. data/lib/datadog/tracing/buffer.rb +0 -5
  305. data/lib/datadog/tracing/client_ip.rb +61 -0
  306. data/lib/datadog/tracing/component.rb +235 -0
  307. data/lib/datadog/tracing/configuration/agent_settings_resolver.rb +13 -0
  308. data/lib/datadog/tracing/configuration/dynamic/option.rb +71 -0
  309. data/lib/datadog/tracing/configuration/dynamic.rb +64 -0
  310. data/lib/datadog/tracing/configuration/ext.rb +73 -15
  311. data/lib/datadog/tracing/configuration/http.rb +74 -0
  312. data/lib/datadog/tracing/configuration/settings.rb +501 -0
  313. data/lib/datadog/tracing/context.rb +1 -1
  314. data/lib/datadog/tracing/context_provider.rb +0 -2
  315. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +10 -7
  316. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  317. data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +0 -2
  318. data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +0 -2
  319. data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +0 -2
  320. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
  321. data/lib/datadog/tracing/contrib/action_cable/ext.rb +19 -19
  322. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +0 -2
  323. data/lib/datadog/tracing/contrib/action_cable/integration.rb +0 -2
  324. data/lib/datadog/tracing/contrib/action_cable/patcher.rb +1 -1
  325. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +10 -7
  326. data/lib/datadog/tracing/contrib/action_mailer/event.rb +1 -1
  327. data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +0 -2
  328. data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +0 -2
  329. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
  330. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +19 -19
  331. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +0 -2
  332. data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +1 -1
  333. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -26
  334. data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +1 -1
  335. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +22 -9
  336. data/lib/datadog/tracing/contrib/action_pack/ext.rb +9 -9
  337. data/lib/datadog/tracing/contrib/action_pack/integration.rb +0 -2
  338. data/lib/datadog/tracing/contrib/action_pack/patcher.rb +1 -1
  339. data/lib/datadog/tracing/contrib/action_pack/utils.rb +0 -2
  340. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +9 -8
  341. data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
  342. data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +0 -2
  343. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +0 -2
  344. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
  345. data/lib/datadog/tracing/contrib/action_view/ext.rb +11 -11
  346. data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +0 -2
  347. data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +0 -2
  348. data/lib/datadog/tracing/contrib/action_view/integration.rb +0 -2
  349. data/lib/datadog/tracing/contrib/action_view/patcher.rb +0 -2
  350. data/lib/datadog/tracing/contrib/action_view/utils.rb +0 -2
  351. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +14 -8
  352. data/lib/datadog/tracing/contrib/active_job/event.rb +1 -1
  353. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +0 -2
  354. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +0 -2
  355. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +0 -2
  356. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +0 -2
  357. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +0 -2
  358. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +0 -2
  359. data/lib/datadog/tracing/contrib/active_job/events.rb +1 -1
  360. data/lib/datadog/tracing/contrib/active_job/ext.rb +24 -24
  361. data/lib/datadog/tracing/contrib/active_job/integration.rb +0 -2
  362. data/lib/datadog/tracing/contrib/active_job/log_injection.rb +2 -2
  363. data/lib/datadog/tracing/contrib/active_job/patcher.rb +2 -2
  364. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +10 -7
  365. data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +1 -1
  366. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +0 -2
  367. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +0 -2
  368. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
  369. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +11 -11
  370. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +0 -2
  371. data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +1 -1
  372. data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
  373. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +18 -13
  374. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +16 -9
  375. data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
  376. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +0 -2
  377. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +3 -6
  378. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
  379. data/lib/datadog/tracing/contrib/active_record/ext.rb +16 -16
  380. data/lib/datadog/tracing/contrib/active_record/integration.rb +0 -2
  381. data/lib/datadog/tracing/contrib/active_record/patcher.rb +1 -1
  382. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -3
  383. data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
  384. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +107 -201
  385. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -1
  386. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
  387. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +18 -8
  388. data/lib/datadog/tracing/contrib/active_support/ext.rb +17 -17
  389. data/lib/datadog/tracing/contrib/active_support/integration.rb +0 -2
  390. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
  391. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
  392. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +0 -2
  393. data/lib/datadog/tracing/contrib/active_support/patcher.rb +1 -1
  394. data/lib/datadog/tracing/contrib/analytics.rb +1 -1
  395. data/lib/datadog/tracing/contrib/auto_instrument.rb +1 -1
  396. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +24 -8
  397. data/lib/datadog/tracing/contrib/aws/ext.rb +36 -14
  398. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +28 -3
  399. data/lib/datadog/tracing/contrib/aws/integration.rb +0 -2
  400. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +4 -2
  401. data/lib/datadog/tracing/contrib/aws/patcher.rb +1 -1
  402. data/lib/datadog/tracing/contrib/aws/service/base.rb +16 -0
  403. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +22 -0
  404. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +22 -0
  405. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +32 -0
  406. data/lib/datadog/tracing/contrib/aws/service/s3.rb +22 -0
  407. data/lib/datadog/tracing/contrib/aws/service/sns.rb +30 -0
  408. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +27 -0
  409. data/lib/datadog/tracing/contrib/aws/service/states.rb +40 -0
  410. data/lib/datadog/tracing/contrib/aws/services.rb +17 -3
  411. data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +4 -3
  412. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +15 -15
  413. data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +3 -3
  414. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +4 -11
  415. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +2 -3
  416. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +9 -3
  417. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +22 -0
  418. data/lib/datadog/tracing/contrib/configurable.rb +1 -1
  419. data/lib/datadog/tracing/contrib/configuration/resolver.rb +1 -1
  420. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
  421. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -5
  422. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +29 -8
  423. data/lib/datadog/tracing/contrib/dalli/ext.rb +25 -10
  424. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +23 -7
  425. data/lib/datadog/tracing/contrib/dalli/integration.rb +0 -2
  426. data/lib/datadog/tracing/contrib/dalli/patcher.rb +1 -1
  427. data/lib/datadog/tracing/contrib/dalli/quantize.rb +0 -2
  428. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +14 -8
  429. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +15 -15
  430. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +0 -2
  431. data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +1 -1
  432. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +9 -1
  433. data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +3 -1
  434. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +24 -8
  435. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +20 -13
  436. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +0 -2
  437. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +105 -95
  438. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +0 -4
  439. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +27 -10
  440. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +52 -7
  441. data/lib/datadog/tracing/contrib/ethon/ext.rb +18 -11
  442. data/lib/datadog/tracing/contrib/ethon/integration.rb +0 -2
  443. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +10 -3
  444. data/lib/datadog/tracing/contrib/ethon/patcher.rb +1 -2
  445. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +29 -11
  446. data/lib/datadog/tracing/contrib/excon/ext.rb +15 -8
  447. data/lib/datadog/tracing/contrib/excon/integration.rb +0 -2
  448. data/lib/datadog/tracing/contrib/excon/middleware.rb +27 -4
  449. data/lib/datadog/tracing/contrib/excon/patcher.rb +1 -1
  450. data/lib/datadog/tracing/contrib/ext.rb +55 -0
  451. data/lib/datadog/tracing/contrib/extensions.rb +32 -2
  452. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +30 -11
  453. data/lib/datadog/tracing/contrib/faraday/connection.rb +1 -1
  454. data/lib/datadog/tracing/contrib/faraday/ext.rb +15 -8
  455. data/lib/datadog/tracing/contrib/faraday/integration.rb +0 -2
  456. data/lib/datadog/tracing/contrib/faraday/middleware.rb +24 -6
  457. data/lib/datadog/tracing/contrib/faraday/patcher.rb +0 -2
  458. data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +1 -1
  459. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +9 -7
  460. data/lib/datadog/tracing/contrib/grape/endpoint.rb +0 -4
  461. data/lib/datadog/tracing/contrib/grape/ext.rb +15 -15
  462. data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
  463. data/lib/datadog/tracing/contrib/grape/integration.rb +0 -2
  464. data/lib/datadog/tracing/contrib/grape/patcher.rb +1 -1
  465. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +10 -8
  466. data/lib/datadog/tracing/contrib/graphql/ext.rb +6 -6
  467. data/lib/datadog/tracing/contrib/graphql/integration.rb +0 -2
  468. data/lib/datadog/tracing/contrib/graphql/patcher.rb +0 -2
  469. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +50 -10
  470. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +45 -19
  471. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +43 -26
  472. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +0 -6
  473. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
  474. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
  475. data/lib/datadog/tracing/contrib/grpc/ext.rb +15 -11
  476. data/lib/datadog/tracing/contrib/grpc/formatting.rb +127 -0
  477. data/lib/datadog/tracing/contrib/grpc/integration.rb +8 -3
  478. data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +1 -1
  479. data/lib/datadog/tracing/contrib/grpc/patcher.rb +1 -4
  480. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
  481. data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +23 -0
  482. data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
  483. data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
  484. data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
  485. data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
  486. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
  487. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
  488. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +6 -9
  489. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +47 -10
  490. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
  491. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
  492. data/lib/datadog/tracing/contrib/http/ext.rb +15 -8
  493. data/lib/datadog/tracing/contrib/http/instrumentation.rb +32 -12
  494. data/lib/datadog/tracing/contrib/http/integration.rb +1 -1
  495. data/lib/datadog/tracing/contrib/http/patcher.rb +1 -1
  496. data/lib/datadog/tracing/contrib/http_annotation_helper.rb +1 -1
  497. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +47 -10
  498. data/lib/datadog/tracing/contrib/httpclient/ext.rb +16 -8
  499. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +27 -8
  500. data/lib/datadog/tracing/contrib/httpclient/integration.rb +0 -2
  501. data/lib/datadog/tracing/contrib/httpclient/patcher.rb +0 -2
  502. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +47 -10
  503. data/lib/datadog/tracing/contrib/httprb/ext.rb +15 -8
  504. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +27 -9
  505. data/lib/datadog/tracing/contrib/httprb/integration.rb +0 -2
  506. data/lib/datadog/tracing/contrib/httprb/patcher.rb +0 -2
  507. data/lib/datadog/tracing/contrib/integration.rb +1 -1
  508. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +10 -7
  509. data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +2 -1
  510. data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +1 -1
  511. data/lib/datadog/tracing/contrib/kafka/event.rb +2 -1
  512. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +0 -2
  513. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +0 -2
  514. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +0 -2
  515. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +0 -2
  516. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +0 -2
  517. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +0 -2
  518. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +0 -2
  519. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -2
  520. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -2
  521. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
  522. data/lib/datadog/tracing/contrib/kafka/ext.rb +41 -39
  523. data/lib/datadog/tracing/contrib/kafka/integration.rb +0 -2
  524. data/lib/datadog/tracing/contrib/kafka/patcher.rb +1 -1
  525. data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +4 -3
  526. data/lib/datadog/tracing/contrib/lograge/ext.rb +2 -2
  527. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +3 -18
  528. data/lib/datadog/tracing/contrib/lograge/integration.rb +0 -2
  529. data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
  530. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +24 -8
  531. data/lib/datadog/tracing/contrib/mongodb/ext.rb +24 -14
  532. data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +1 -1
  533. data/lib/datadog/tracing/contrib/mongodb/integration.rb +0 -2
  534. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +0 -2
  535. data/lib/datadog/tracing/contrib/mongodb/patcher.rb +1 -1
  536. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +22 -4
  537. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +35 -8
  538. data/lib/datadog/tracing/contrib/mysql2/ext.rb +14 -9
  539. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +38 -4
  540. data/lib/datadog/tracing/contrib/mysql2/integration.rb +0 -2
  541. data/lib/datadog/tracing/contrib/mysql2/patcher.rb +1 -1
  542. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +52 -0
  543. data/lib/datadog/tracing/contrib/opensearch/ext.rb +37 -0
  544. data/lib/datadog/tracing/contrib/opensearch/integration.rb +44 -0
  545. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +135 -0
  546. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +81 -0
  547. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  548. data/lib/datadog/tracing/contrib/patcher.rb +3 -5
  549. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +36 -8
  550. data/lib/datadog/tracing/contrib/pg/ext.rb +21 -18
  551. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +115 -39
  552. data/lib/datadog/tracing/contrib/pg/integration.rb +0 -2
  553. data/lib/datadog/tracing/contrib/pg/patcher.rb +1 -1
  554. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +23 -8
  555. data/lib/datadog/tracing/contrib/presto/ext.rb +24 -19
  556. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +17 -5
  557. data/lib/datadog/tracing/contrib/presto/integration.rb +0 -2
  558. data/lib/datadog/tracing/contrib/presto/patcher.rb +0 -2
  559. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
  560. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
  561. data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
  562. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +53 -0
  563. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +13 -9
  564. data/lib/datadog/tracing/contrib/qless/ext.rb +13 -13
  565. data/lib/datadog/tracing/contrib/qless/integration.rb +0 -2
  566. data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
  567. data/lib/datadog/tracing/contrib/qless/qless_job.rb +3 -2
  568. data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +1 -1
  569. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +21 -14
  570. data/lib/datadog/tracing/contrib/que/ext.rb +0 -2
  571. data/lib/datadog/tracing/contrib/que/integration.rb +0 -2
  572. data/lib/datadog/tracing/contrib/que/patcher.rb +0 -2
  573. data/lib/datadog/tracing/contrib/que/tracer.rb +4 -2
  574. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +18 -8
  575. data/lib/datadog/tracing/contrib/racecar/event.rb +7 -4
  576. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +4 -3
  577. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +0 -2
  578. data/lib/datadog/tracing/contrib/racecar/events/message.rb +4 -3
  579. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
  580. data/lib/datadog/tracing/contrib/racecar/ext.rb +19 -18
  581. data/lib/datadog/tracing/contrib/racecar/integration.rb +0 -2
  582. data/lib/datadog/tracing/contrib/racecar/patcher.rb +1 -1
  583. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +16 -14
  584. data/lib/datadog/tracing/contrib/rack/ext.rb +17 -12
  585. data/lib/datadog/tracing/contrib/rack/header_collection.rb +38 -0
  586. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +63 -0
  587. data/lib/datadog/tracing/contrib/rack/integration.rb +0 -2
  588. data/lib/datadog/tracing/contrib/rack/middlewares.rb +130 -81
  589. data/lib/datadog/tracing/contrib/rack/patcher.rb +0 -2
  590. data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
  591. data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +0 -4
  592. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +28 -19
  593. data/lib/datadog/tracing/contrib/rails/ext.rb +6 -6
  594. data/lib/datadog/tracing/contrib/rails/framework.rb +1 -1
  595. data/lib/datadog/tracing/contrib/rails/integration.rb +0 -2
  596. data/lib/datadog/tracing/contrib/rails/log_injection.rb +7 -12
  597. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  598. data/lib/datadog/tracing/contrib/rails/patcher.rb +10 -43
  599. data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
  600. data/lib/datadog/tracing/contrib/rails/utils.rb +2 -2
  601. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +14 -11
  602. data/lib/datadog/tracing/contrib/rake/ext.rb +13 -13
  603. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +0 -2
  604. data/lib/datadog/tracing/contrib/rake/integration.rb +0 -2
  605. data/lib/datadog/tracing/contrib/rake/patcher.rb +1 -1
  606. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +0 -2
  607. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +26 -10
  608. data/lib/datadog/tracing/contrib/redis/ext.rb +21 -13
  609. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +13 -39
  610. data/lib/datadog/tracing/contrib/redis/integration.rb +34 -3
  611. data/lib/datadog/tracing/contrib/redis/patcher.rb +53 -11
  612. data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
  613. data/lib/datadog/tracing/contrib/redis/tags.rb +24 -9
  614. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +83 -0
  615. data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
  616. data/lib/datadog/tracing/contrib/registerable.rb +1 -1
  617. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  618. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +14 -8
  619. data/lib/datadog/tracing/contrib/resque/ext.rb +8 -8
  620. data/lib/datadog/tracing/contrib/resque/integration.rb +0 -2
  621. data/lib/datadog/tracing/contrib/resque/patcher.rb +1 -1
  622. data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -1
  623. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +27 -10
  624. data/lib/datadog/tracing/contrib/rest_client/ext.rb +14 -8
  625. data/lib/datadog/tracing/contrib/rest_client/integration.rb +0 -2
  626. data/lib/datadog/tracing/contrib/rest_client/patcher.rb +1 -2
  627. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +28 -3
  628. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +37 -0
  629. data/lib/datadog/tracing/contrib/roda/ext.rb +18 -0
  630. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +76 -0
  631. data/lib/datadog/tracing/contrib/roda/integration.rb +45 -0
  632. data/lib/datadog/{ci/contrib/cucumber → tracing/contrib/roda}/patcher.rb +10 -7
  633. data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +4 -3
  634. data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +2 -2
  635. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +6 -21
  636. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +0 -2
  637. data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +1 -1
  638. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +10 -7
  639. data/lib/datadog/tracing/contrib/sequel/database.rb +4 -3
  640. data/lib/datadog/tracing/contrib/sequel/dataset.rb +5 -2
  641. data/lib/datadog/tracing/contrib/sequel/ext.rb +9 -9
  642. data/lib/datadog/tracing/contrib/sequel/integration.rb +0 -2
  643. data/lib/datadog/tracing/contrib/sequel/patcher.rb +1 -1
  644. data/lib/datadog/tracing/contrib/sequel/utils.rb +7 -6
  645. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +15 -9
  646. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +13 -12
  647. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +0 -2
  648. data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
  649. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -1
  650. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +18 -4
  651. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +19 -11
  652. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +38 -0
  653. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +31 -31
  654. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +8 -2
  655. data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +15 -3
  656. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +14 -5
  657. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +3 -1
  658. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +3 -1
  659. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +5 -1
  660. data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/stop.rb +34 -0
  661. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +24 -3
  662. data/lib/datadog/tracing/contrib/sidekiq/{tracing.rb → utils.rb} +2 -2
  663. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +11 -11
  664. data/lib/datadog/tracing/contrib/sinatra/env.rb +11 -41
  665. data/lib/datadog/tracing/contrib/sinatra/ext.rb +23 -19
  666. data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
  667. data/lib/datadog/tracing/contrib/sinatra/integration.rb +0 -2
  668. data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -3
  669. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +8 -82
  670. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +14 -20
  671. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +14 -10
  672. data/lib/datadog/tracing/contrib/sneakers/ext.rb +2 -2
  673. data/lib/datadog/tracing/contrib/sneakers/integration.rb +0 -2
  674. data/lib/datadog/tracing/contrib/sneakers/patcher.rb +0 -2
  675. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +5 -2
  676. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +92 -0
  677. data/lib/datadog/tracing/contrib/status_code_matcher.rb +0 -3
  678. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +36 -0
  679. data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
  680. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  681. data/lib/datadog/tracing/contrib/stripe/patcher.rb +28 -0
  682. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  683. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +10 -7
  684. data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +1 -1
  685. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +14 -14
  686. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +0 -2
  687. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +0 -2
  688. data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +1 -2
  689. data/lib/datadog/tracing/contrib/utils/database.rb +4 -4
  690. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
  691. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
  692. data/lib/datadog/tracing/contrib.rb +5 -1
  693. data/lib/datadog/tracing/correlation.rb +42 -14
  694. data/lib/datadog/tracing/diagnostics/environment_logger.rb +165 -0
  695. data/lib/datadog/{core → tracing}/diagnostics/ext.rb +21 -26
  696. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  697. data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
  698. data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
  699. data/lib/datadog/tracing/distributed/datadog.rb +199 -0
  700. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
  701. data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
  702. data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
  703. data/lib/datadog/tracing/distributed/helpers.rb +26 -39
  704. data/lib/datadog/tracing/distributed/none.rb +18 -0
  705. data/lib/datadog/tracing/distributed/propagation.rb +127 -0
  706. data/lib/datadog/tracing/distributed/trace_context.rb +415 -0
  707. data/lib/datadog/tracing/event.rb +0 -4
  708. data/lib/datadog/tracing/flush.rb +58 -36
  709. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  710. data/lib/datadog/tracing/metadata/errors.rb +1 -1
  711. data/lib/datadog/tracing/metadata/ext.rb +29 -14
  712. data/lib/datadog/tracing/metadata/tagging.rb +17 -4
  713. data/lib/datadog/tracing/metadata.rb +1 -1
  714. data/lib/datadog/tracing/pipeline/span_filter.rb +1 -1
  715. data/lib/datadog/tracing/pipeline/span_processor.rb +1 -1
  716. data/lib/datadog/tracing/pipeline.rb +0 -4
  717. data/lib/datadog/tracing/propagation/http.rb +4 -99
  718. data/lib/datadog/tracing/remote.rb +78 -0
  719. data/lib/datadog/tracing/runtime/metrics.rb +1 -3
  720. data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
  721. data/lib/datadog/tracing/sampling/ext.rb +30 -1
  722. data/lib/datadog/tracing/sampling/matcher.rb +1 -1
  723. data/lib/datadog/tracing/sampling/priority_sampler.rb +58 -5
  724. data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +8 -11
  725. data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +29 -8
  726. data/lib/datadog/tracing/sampling/rate_limiter.rb +3 -2
  727. data/lib/datadog/tracing/sampling/rate_sampler.rb +23 -10
  728. data/lib/datadog/tracing/sampling/rule.rb +0 -4
  729. data/lib/datadog/tracing/sampling/rule_sampler.rb +33 -7
  730. data/lib/datadog/tracing/sampling/sampler.rb +0 -2
  731. data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
  732. data/lib/datadog/tracing/sampling/span/matcher.rb +9 -0
  733. data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
  734. data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
  735. data/lib/datadog/tracing/sampling/span/sampler.rb +77 -0
  736. data/lib/datadog/tracing/span.rb +3 -21
  737. data/lib/datadog/tracing/span_operation.rb +8 -24
  738. data/lib/datadog/tracing/sync_writer.rb +4 -6
  739. data/lib/datadog/tracing/trace_digest.rb +120 -3
  740. data/lib/datadog/tracing/trace_operation.rb +61 -13
  741. data/lib/datadog/tracing/trace_segment.rb +20 -7
  742. data/lib/datadog/tracing/tracer.rb +46 -10
  743. data/lib/datadog/tracing/transport/http/api/instance.rb +37 -0
  744. data/lib/datadog/tracing/transport/http/api/spec.rb +19 -0
  745. data/lib/datadog/tracing/transport/http/api.rb +43 -0
  746. data/lib/datadog/tracing/transport/http/builder.rb +162 -0
  747. data/lib/datadog/tracing/transport/http/client.rb +57 -0
  748. data/lib/datadog/tracing/transport/http/statistics.rb +47 -0
  749. data/lib/datadog/tracing/transport/http/traces.rb +152 -0
  750. data/lib/datadog/tracing/transport/http.rb +124 -0
  751. data/lib/datadog/tracing/transport/io/client.rb +89 -0
  752. data/lib/datadog/tracing/transport/io/response.rb +27 -0
  753. data/lib/datadog/tracing/transport/io/traces.rb +101 -0
  754. data/lib/datadog/tracing/transport/io.rb +30 -0
  755. data/lib/datadog/tracing/transport/serializable_trace.rb +126 -0
  756. data/lib/datadog/tracing/transport/statistics.rb +77 -0
  757. data/lib/datadog/tracing/transport/trace_formatter.rb +209 -0
  758. data/lib/datadog/tracing/transport/traces.rb +224 -0
  759. data/lib/datadog/tracing/utils.rb +83 -0
  760. data/lib/datadog/tracing/workers/trace_writer.rb +6 -7
  761. data/lib/datadog/tracing/workers.rb +4 -6
  762. data/lib/datadog/tracing/writer.rb +12 -6
  763. data/lib/datadog/tracing.rb +1 -1
  764. data/lib/ddtrace/auto_instrument.rb +1 -1
  765. data/lib/ddtrace/auto_instrument_base.rb +1 -1
  766. data/lib/ddtrace/profiling/preload.rb +0 -2
  767. data/lib/ddtrace/transport/ext.rb +21 -15
  768. data/lib/ddtrace/version.rb +14 -15
  769. data/lib/ddtrace.rb +3 -5
  770. metadata +230 -113
  771. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -390
  772. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +0 -6
  773. data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
  774. data/lib/datadog/appsec/contrib/configuration/settings.rb +0 -20
  775. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +0 -22
  776. data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
  777. data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
  778. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +0 -22
  779. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +0 -22
  780. data/lib/datadog/ci/configuration/components.rb +0 -32
  781. data/lib/datadog/ci/configuration/settings.rb +0 -53
  782. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +0 -33
  783. data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -22
  784. data/lib/datadog/ci/contrib/cucumber/formatter.rb +0 -94
  785. data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +0 -28
  786. data/lib/datadog/ci/contrib/cucumber/integration.rb +0 -49
  787. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +0 -33
  788. data/lib/datadog/ci/contrib/rspec/example.rb +0 -70
  789. data/lib/datadog/ci/contrib/rspec/ext.rb +0 -21
  790. data/lib/datadog/ci/contrib/rspec/integration.rb +0 -50
  791. data/lib/datadog/ci/contrib/rspec/patcher.rb +0 -27
  792. data/lib/datadog/ci/ext/app_types.rb +0 -11
  793. data/lib/datadog/ci/ext/environment.rb +0 -505
  794. data/lib/datadog/ci/ext/settings.rb +0 -12
  795. data/lib/datadog/ci/ext/test.rb +0 -37
  796. data/lib/datadog/ci/extensions.rb +0 -19
  797. data/lib/datadog/ci/flush.rb +0 -38
  798. data/lib/datadog/ci/test.rb +0 -83
  799. data/lib/datadog/ci.rb +0 -20
  800. data/lib/datadog/core/configuration/dependency_resolver.rb +0 -28
  801. data/lib/datadog/core/configuration/option_definition_set.rb +0 -22
  802. data/lib/datadog/core/configuration/option_set.rb +0 -10
  803. data/lib/datadog/core/utils/object_set.rb +0 -43
  804. data/lib/datadog/core/utils/string_table.rb +0 -49
  805. data/lib/datadog/profiling/backtrace_location.rb +0 -34
  806. data/lib/datadog/profiling/buffer.rb +0 -43
  807. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -27
  808. data/lib/datadog/profiling/collectors/old_stack.rb +0 -298
  809. data/lib/datadog/profiling/encoding/profile.rb +0 -43
  810. data/lib/datadog/profiling/event.rb +0 -15
  811. data/lib/datadog/profiling/events/stack.rb +0 -82
  812. data/lib/datadog/profiling/old_ext.rb +0 -42
  813. data/lib/datadog/profiling/old_recorder.rb +0 -101
  814. data/lib/datadog/profiling/pprof/builder.rb +0 -127
  815. data/lib/datadog/profiling/pprof/converter.rb +0 -104
  816. data/lib/datadog/profiling/pprof/message_set.rb +0 -16
  817. data/lib/datadog/profiling/pprof/payload.rb +0 -20
  818. data/lib/datadog/profiling/pprof/pprof.proto +0 -212
  819. data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -83
  820. data/lib/datadog/profiling/pprof/stack_sample.rb +0 -141
  821. data/lib/datadog/profiling/pprof/string_table.rb +0 -12
  822. data/lib/datadog/profiling/pprof/template.rb +0 -120
  823. data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +0 -45
  824. data/lib/datadog/profiling/trace_identifiers/helper.rb +0 -47
  825. data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
  826. data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
  827. data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
  828. data/lib/datadog/profiling/transport/http/api.rb +0 -45
  829. data/lib/datadog/profiling/transport/http/builder.rb +0 -30
  830. data/lib/datadog/profiling/transport/http/client.rb +0 -37
  831. data/lib/datadog/profiling/transport/http/response.rb +0 -21
  832. data/lib/datadog/profiling/transport/http.rb +0 -118
  833. data/lib/datadog/tracing/contrib/sinatra/headers.rb +0 -35
  834. data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
  835. data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
  836. data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
  837. data/lib/datadog/tracing/distributed/headers/parser.rb +0 -37
  838. data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
  839. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
  840. data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
  841. data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
  842. data/lib/datadog/tracing/propagation/grpc.rb +0 -98
  843. data/lib/ddtrace/transport/http/adapters/net.rb +0 -158
  844. data/lib/ddtrace/transport/http/adapters/registry.rb +0 -27
  845. data/lib/ddtrace/transport/http/adapters/test.rb +0 -87
  846. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +0 -79
  847. data/lib/ddtrace/transport/http/api/endpoint.rb +0 -29
  848. data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -24
  849. data/lib/ddtrace/transport/http/api/instance.rb +0 -35
  850. data/lib/ddtrace/transport/http/api/map.rb +0 -16
  851. data/lib/ddtrace/transport/http/api/spec.rb +0 -17
  852. data/lib/ddtrace/transport/http/api.rb +0 -41
  853. data/lib/ddtrace/transport/http/builder.rb +0 -178
  854. data/lib/ddtrace/transport/http/client.rb +0 -54
  855. data/lib/ddtrace/transport/http/env.rb +0 -58
  856. data/lib/ddtrace/transport/http/response.rb +0 -58
  857. data/lib/ddtrace/transport/http/statistics.rb +0 -45
  858. data/lib/ddtrace/transport/http/traces.rb +0 -146
  859. data/lib/ddtrace/transport/http.rb +0 -121
  860. data/lib/ddtrace/transport/io/client.rb +0 -87
  861. data/lib/ddtrace/transport/io/response.rb +0 -25
  862. data/lib/ddtrace/transport/io/traces.rb +0 -101
  863. data/lib/ddtrace/transport/io.rb +0 -28
  864. data/lib/ddtrace/transport/parcel.rb +0 -22
  865. data/lib/ddtrace/transport/request.rb +0 -15
  866. data/lib/ddtrace/transport/response.rb +0 -62
  867. data/lib/ddtrace/transport/serializable_trace.rb +0 -118
  868. data/lib/ddtrace/transport/statistics.rb +0 -75
  869. data/lib/ddtrace/transport/trace_formatter.rb +0 -187
  870. data/lib/ddtrace/transport/traces.rb +0 -216
@@ -0,0 +1,155 @@
1
+ #pragma once
2
+
3
+ #include <datadog/profiling.h>
4
+ #include <ruby.h>
5
+
6
+ // A heap recorder keeps track of a collection of live heap objects.
7
+ //
8
+ // All allocations observed by this recorder for which a corresponding free was
9
+ // not yet observed are deemed as alive and can be iterated on to produce a
10
+ // live heap profile.
11
+ //
12
+ // NOTE: All public APIs of heap_recorder support receiving a NULL heap_recorder
13
+ // in which case the behaviour will be a noop.
14
+ //
15
+ // WARN: Unless otherwise stated the heap recorder APIs assume calls are done
16
+ // under the GVL.
17
+ typedef struct heap_recorder heap_recorder;
18
+
19
+ // Extra data associated with each live object being tracked.
20
+ typedef struct live_object_data {
21
+ // The weight of this object from a sampling perspective.
22
+ //
23
+ // A notion of weight is preserved for each tracked object to allow for an approximate
24
+ // extrapolation to an unsampled view.
25
+ //
26
+ // Example: If we were sampling every 50 objects, then each sampled object
27
+ // could be seen as being representative of 50 objects.
28
+ unsigned int weight;
29
+
30
+ // Size of this object on last flush/update.
31
+ size_t size;
32
+
33
+ // The class of the object that we're tracking.
34
+ // NOTE: This is optional and will be set to NULL if not set.
35
+ char* class;
36
+
37
+ // The GC allocation gen in which we saw this object being allocated.
38
+ //
39
+ // This enables us to calculate the age of this object in terms of GC executions.
40
+ size_t alloc_gen;
41
+
42
+ // Whether this object was previously seen as being frozen. If this is the case,
43
+ // we'll skip any further size updates since frozen objects are supposed to be
44
+ // immutable.
45
+ bool is_frozen;
46
+ } live_object_data;
47
+
48
+ // Data that is made available to iterators of heap recorder data for each live object
49
+ // tracked therein.
50
+ typedef struct {
51
+ ddog_prof_Slice_Location locations;
52
+ live_object_data object_data;
53
+ } heap_recorder_iteration_data;
54
+
55
+ // Initialize a new heap recorder.
56
+ heap_recorder* heap_recorder_new(void);
57
+
58
+ // Free a previously initialized heap recorder.
59
+ void heap_recorder_free(heap_recorder *heap_recorder);
60
+
61
+ // Sets whether this heap recorder should keep track of sizes or not.
62
+ //
63
+ // If set to true, the heap recorder will attempt to determine the approximate sizes of
64
+ // tracked objects and wield them during iteration.
65
+ // If set to false, sizes returned during iteration should not be used/relied on (they
66
+ // may be 0 or the last determined size before disabling the tracking of sizes).
67
+ //
68
+ // NOTE: Default is true, i.e., it will attempt to determine approximate sizes of tracked
69
+ // objects.
70
+ void heap_recorder_set_size_enabled(heap_recorder *heap_recorder, bool size_enabled);
71
+
72
+ // Set sample rate used by this heap recorder.
73
+ //
74
+ // Controls how many recordings will be ignored before committing a heap allocation and
75
+ // the weight of the committed heap allocation.
76
+ //
77
+ // A value of 1 will effectively track all objects that are passed through
78
+ // start/end_heap_allocation_recording pairs. A value of 10 will only track every 10th
79
+ // object passed through such calls and its effective weight for the purposes of heap
80
+ // profiling will be multiplied by 10.
81
+ //
82
+ // NOTE: Default is 1, i.e., track all heap allocation recordings.
83
+ //
84
+ // WARN: Non-positive values will lead to an exception being thrown.
85
+ void heap_recorder_set_sample_rate(heap_recorder *heap_recorder, int sample_rate);
86
+
87
+ // Do any cleanup needed after forking.
88
+ // WARN: Assumes this gets called before profiler is reinitialized on the fork
89
+ void heap_recorder_after_fork(heap_recorder *heap_recorder);
90
+
91
+ // Start a heap allocation recording on the heap recorder for a new object.
92
+ //
93
+ // This heap allocation recording needs to be ended via ::end_heap_allocation_recording
94
+ // before it will become fully committed and able to be iterated on.
95
+ //
96
+ // @param new_obj
97
+ // The newly allocated Ruby object/value.
98
+ // @param weight
99
+ // The sampling weight of this object.
100
+ //
101
+ // WARN: It needs to be paired with a ::end_heap_allocation_recording call.
102
+ void start_heap_allocation_recording(heap_recorder *heap_recorder, VALUE new_obj, unsigned int weight, ddog_CharSlice *alloc_class);
103
+
104
+ // End a previously started heap allocation recording on the heap recorder.
105
+ //
106
+ // It is at this point that an allocated object will become fully tracked and able to be iterated on.
107
+ //
108
+ // @param locations The stacktrace representing the location of the allocation.
109
+ //
110
+ // WARN: It is illegal to call this without previously having called ::start_heap_allocation_recording.
111
+ void end_heap_allocation_recording(heap_recorder *heap_recorder, ddog_prof_Slice_Location locations);
112
+
113
+ // Update the heap recorder to reflect the latest state of the VM and prepare internal structures
114
+ // for efficient iteration.
115
+ //
116
+ // WARN: This must be called strictly before iteration. Failing to do so will result in exceptions.
117
+ void heap_recorder_prepare_iteration(heap_recorder *heap_recorder);
118
+
119
+ // Optimize the heap recorder by cleaning up any data that might have been prepared specifically
120
+ // for the purpose of iterating over the heap recorder data.
121
+ //
122
+ // WARN: This must be called strictly after iteration to ensure proper cleanup and to keep the memory
123
+ // profile of the heap recorder low.
124
+ void heap_recorder_finish_iteration(heap_recorder *heap_recorder);
125
+
126
+ // Iterate over each live object being tracked by the heap recorder.
127
+ //
128
+ // NOTE: Iteration can be called without holding the Ruby Global VM lock.
129
+ // WARN: This must be called strictly after heap_recorder_prepare_iteration and before
130
+ // heap_recorder_finish_iteration.
131
+ //
132
+ // @param for_each_callback
133
+ // A callback function that shall be called for each live object being tracked
134
+ // by the heap recorder. Alongside the iteration_data for each live object,
135
+ // a second argument will be forwarded with the contents of the optional
136
+ // for_each_callback_extra_arg. Iteration will continue until the callback
137
+ // returns false or we run out of objects.
138
+ // @param for_each_callback_extra_arg
139
+ // Optional (NULL if empty) extra data that should be passed to the
140
+ // callback function alongside the data for each live tracked object.
141
+ // @return true if iteration ran, false if something prevented it from running.
142
+ bool heap_recorder_for_each_live_object(
143
+ heap_recorder *heap_recorder,
144
+ bool (*for_each_callback)(heap_recorder_iteration_data data, void* extra_arg),
145
+ void *for_each_callback_extra_arg);
146
+
147
+ // v--- TEST-ONLY APIs ---v
148
+
149
+ // Assert internal hashing logic is valid for the provided locations and its
150
+ // corresponding internal representations in heap recorder.
151
+ void heap_recorder_testonly_assert_hash_matches(ddog_prof_Slice_Location locations);
152
+
153
+ // Returns a Ruby string with a representation of internal data helpful to
154
+ // troubleshoot issues such as unexpected test failures.
155
+ VALUE heap_recorder_testonly_debug(heap_recorder *heap_recorder);
@@ -10,3 +10,10 @@
10
10
  #else
11
11
  #define DDTRACE_UNUSED
12
12
  #endif
13
+
14
+ // @ivoanjo: After trying to read through https://stackoverflow.com/questions/3437404/min-and-max-in-c I decided I
15
+ // don't like C and I just implemented this as a function.
16
+ inline static uint64_t uint64_max_of(uint64_t a, uint64_t b) { return a > b ? a : b; }
17
+ inline static uint64_t uint64_min_of(uint64_t a, uint64_t b) { return a > b ? b : a; }
18
+ inline static long long_max_of(long a, long b) { return a > b ? a : b; }
19
+ inline static long long_min_of(long a, long b) { return a > b ? b : a; }
@@ -1,6 +1,6 @@
1
1
  #include <ruby.h>
2
2
  #include <ruby/thread.h>
3
- #include <ddprof/ffi.h>
3
+ #include <datadog/profiling.h>
4
4
  #include "helpers.h"
5
5
  #include "libdatadog_helpers.h"
6
6
  #include "ruby_helpers.h"
@@ -16,23 +16,23 @@ static ID agent_id; // id of :agent in Ruby
16
16
 
17
17
  static ID log_failure_to_process_tag_id; // id of :log_failure_to_process_tag in Ruby
18
18
 
19
- static VALUE http_transport_class = Qnil;
19
+ static VALUE library_version_string = Qnil;
20
20
 
21
21
  struct call_exporter_without_gvl_arguments {
22
- ddprof_ffi_ProfileExporterV3 *exporter;
23
- ddprof_ffi_Request *request;
24
- ddprof_ffi_CancellationToken *cancel_token;
25
- ddprof_ffi_SendResult result;
22
+ ddog_prof_Exporter *exporter;
23
+ ddog_prof_Exporter_Request_BuildResult *build_result;
24
+ ddog_CancellationToken *cancel_token;
25
+ ddog_prof_Exporter_SendResult result;
26
26
  bool send_ran;
27
27
  };
28
28
 
29
- inline static ddprof_ffi_ByteSlice byte_slice_from_ruby_string(VALUE string);
29
+ inline static ddog_ByteSlice byte_slice_from_ruby_string(VALUE string);
30
30
  static VALUE _native_validate_exporter(VALUE self, VALUE exporter_configuration);
31
- static ddprof_ffi_NewProfileExporterV3Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array);
32
- static VALUE handle_exporter_failure(ddprof_ffi_NewProfileExporterV3Result exporter_result);
33
- static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration);
34
- static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array);
35
- static void safely_log_failure_to_process_tag(ddprof_ffi_Vec_tag tags, VALUE err_details);
31
+ static ddog_prof_Exporter_NewResult create_exporter(VALUE exporter_configuration, VALUE tags_as_array);
32
+ static VALUE handle_exporter_failure(ddog_prof_Exporter_NewResult exporter_result);
33
+ static ddog_Endpoint endpoint_from(VALUE exporter_configuration);
34
+ static ddog_Vec_Tag convert_tags(VALUE tags_as_array);
35
+ static void safely_log_failure_to_process_tag(ddog_Vec_Tag tags, VALUE err_details);
36
36
  static VALUE _native_do_export(
37
37
  VALUE self,
38
38
  VALUE exporter_configuration,
@@ -45,73 +45,78 @@ static VALUE _native_do_export(
45
45
  VALUE pprof_data,
46
46
  VALUE code_provenance_file_name,
47
47
  VALUE code_provenance_data,
48
- VALUE tags_as_array
48
+ VALUE tags_as_array,
49
+ VALUE internal_metadata_json
49
50
  );
50
51
  static void *call_exporter_without_gvl(void *call_args);
51
52
  static void interrupt_exporter_call(void *cancel_token);
53
+ static VALUE ddtrace_version(void);
52
54
 
53
55
  void http_transport_init(VALUE profiling_module) {
54
- http_transport_class = rb_define_class_under(profiling_module, "HttpTransport", rb_cObject);
56
+ VALUE http_transport_class = rb_define_class_under(profiling_module, "HttpTransport", rb_cObject);
55
57
 
56
58
  rb_define_singleton_method(http_transport_class, "_native_validate_exporter", _native_validate_exporter, 1);
57
- rb_define_singleton_method(http_transport_class, "_native_do_export", _native_do_export, 11);
59
+ rb_define_singleton_method(http_transport_class, "_native_do_export", _native_do_export, 12);
58
60
 
59
61
  ok_symbol = ID2SYM(rb_intern_const("ok"));
60
62
  error_symbol = ID2SYM(rb_intern_const("error"));
61
63
  agentless_id = rb_intern_const("agentless");
62
64
  agent_id = rb_intern_const("agent");
63
65
  log_failure_to_process_tag_id = rb_intern_const("log_failure_to_process_tag");
66
+
67
+ library_version_string = ddtrace_version();
68
+ rb_global_variable(&library_version_string);
64
69
  }
65
70
 
66
- inline static ddprof_ffi_ByteSlice byte_slice_from_ruby_string(VALUE string) {
71
+ inline static ddog_ByteSlice byte_slice_from_ruby_string(VALUE string) {
67
72
  ENFORCE_TYPE(string, T_STRING);
68
- ddprof_ffi_ByteSlice byte_slice = {.ptr = (uint8_t *) StringValuePtr(string), .len = RSTRING_LEN(string)};
73
+ ddog_ByteSlice byte_slice = {.ptr = (uint8_t *) StringValuePtr(string), .len = RSTRING_LEN(string)};
69
74
  return byte_slice;
70
75
  }
71
76
 
72
77
  static VALUE _native_validate_exporter(DDTRACE_UNUSED VALUE _self, VALUE exporter_configuration) {
73
78
  ENFORCE_TYPE(exporter_configuration, T_ARRAY);
74
- ddprof_ffi_NewProfileExporterV3Result exporter_result = create_exporter(exporter_configuration, rb_ary_new());
79
+ ddog_prof_Exporter_NewResult exporter_result = create_exporter(exporter_configuration, rb_ary_new());
75
80
 
76
81
  VALUE failure_tuple = handle_exporter_failure(exporter_result);
77
82
  if (!NIL_P(failure_tuple)) return failure_tuple;
78
83
 
79
84
  // We don't actually need the exporter for now -- we just wanted to validate that we could create it with the
80
85
  // settings we were given
81
- ddprof_ffi_NewProfileExporterV3Result_drop(exporter_result);
86
+ ddog_prof_Exporter_drop(exporter_result.ok);
82
87
 
83
88
  return rb_ary_new_from_args(2, ok_symbol, Qnil);
84
89
  }
85
90
 
86
- static ddprof_ffi_NewProfileExporterV3Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array) {
91
+ static ddog_prof_Exporter_NewResult create_exporter(VALUE exporter_configuration, VALUE tags_as_array) {
87
92
  ENFORCE_TYPE(exporter_configuration, T_ARRAY);
88
93
  ENFORCE_TYPE(tags_as_array, T_ARRAY);
89
94
 
90
- // This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the ddprof_ffi_Vec_tag
95
+ // This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the ddog_Vec_Tag
91
96
  // to be leaked.
92
- ddprof_ffi_EndpointV3 endpoint = endpoint_from(exporter_configuration);
97
+ ddog_Endpoint endpoint = endpoint_from(exporter_configuration);
98
+
99
+ ddog_Vec_Tag tags = convert_tags(tags_as_array);
93
100
 
94
- ddprof_ffi_Vec_tag tags = convert_tags(tags_as_array);
101
+ ddog_CharSlice library_name = DDOG_CHARSLICE_C("dd-trace-rb");
102
+ ddog_CharSlice library_version = char_slice_from_ruby_string(library_version_string);
103
+ ddog_CharSlice profiling_family = DDOG_CHARSLICE_C("ruby");
95
104
 
96
- ddprof_ffi_NewProfileExporterV3Result exporter_result =
97
- ddprof_ffi_ProfileExporterV3_new(DDPROF_FFI_CHARSLICE_C("ruby"), &tags, endpoint);
105
+ ddog_prof_Exporter_NewResult exporter_result =
106
+ ddog_prof_Exporter_new(library_name, library_version, profiling_family, &tags, endpoint);
98
107
 
99
- ddprof_ffi_Vec_tag_drop(tags);
108
+ ddog_Vec_Tag_drop(tags);
100
109
 
101
110
  return exporter_result;
102
111
  }
103
112
 
104
- static VALUE handle_exporter_failure(ddprof_ffi_NewProfileExporterV3Result exporter_result) {
105
- if (exporter_result.tag == DDPROF_FFI_NEW_PROFILE_EXPORTER_V3_RESULT_OK) return Qnil;
106
-
107
- VALUE err_details = ruby_string_from_vec_u8(exporter_result.err);
108
-
109
- ddprof_ffi_NewProfileExporterV3Result_drop(exporter_result);
110
-
111
- return rb_ary_new_from_args(2, error_symbol, err_details);
113
+ static VALUE handle_exporter_failure(ddog_prof_Exporter_NewResult exporter_result) {
114
+ return exporter_result.tag == DDOG_PROF_EXPORTER_NEW_RESULT_OK ?
115
+ Qnil :
116
+ rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&exporter_result.err));
112
117
  }
113
118
 
114
- static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration) {
119
+ static ddog_Endpoint endpoint_from(VALUE exporter_configuration) {
115
120
  ENFORCE_TYPE(exporter_configuration, T_ARRAY);
116
121
 
117
122
  ID working_mode = SYM2ID(rb_ary_entry(exporter_configuration, 0)); // SYM2ID verifies its input so we can do this safely
@@ -126,27 +131,27 @@ static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration) {
126
131
  ENFORCE_TYPE(site, T_STRING);
127
132
  ENFORCE_TYPE(api_key, T_STRING);
128
133
 
129
- return ddprof_ffi_EndpointV3_agentless(char_slice_from_ruby_string(site), char_slice_from_ruby_string(api_key));
134
+ return ddog_Endpoint_agentless(char_slice_from_ruby_string(site), char_slice_from_ruby_string(api_key));
130
135
  } else { // agent_id
131
136
  VALUE base_url = rb_ary_entry(exporter_configuration, 1);
132
137
  ENFORCE_TYPE(base_url, T_STRING);
133
138
 
134
- return ddprof_ffi_EndpointV3_agent(char_slice_from_ruby_string(base_url));
139
+ return ddog_Endpoint_agent(char_slice_from_ruby_string(base_url));
135
140
  }
136
141
  }
137
142
 
138
143
  __attribute__((warn_unused_result))
139
- static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array) {
144
+ static ddog_Vec_Tag convert_tags(VALUE tags_as_array) {
140
145
  ENFORCE_TYPE(tags_as_array, T_ARRAY);
141
146
 
142
147
  long tags_count = RARRAY_LEN(tags_as_array);
143
- ddprof_ffi_Vec_tag tags = ddprof_ffi_Vec_tag_new();
148
+ ddog_Vec_Tag tags = ddog_Vec_Tag_new();
144
149
 
145
150
  for (long i = 0; i < tags_count; i++) {
146
151
  VALUE name_value_pair = rb_ary_entry(tags_as_array, i);
147
152
 
148
153
  if (!RB_TYPE_P(name_value_pair, T_ARRAY)) {
149
- ddprof_ffi_Vec_tag_drop(tags);
154
+ ddog_Vec_Tag_drop(tags);
150
155
  ENFORCE_TYPE(name_value_pair, T_ARRAY);
151
156
  }
152
157
 
@@ -155,23 +160,18 @@ static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array) {
155
160
  VALUE tag_value = rb_ary_entry(name_value_pair, 1);
156
161
 
157
162
  if (!(RB_TYPE_P(tag_name, T_STRING) && RB_TYPE_P(tag_value, T_STRING))) {
158
- ddprof_ffi_Vec_tag_drop(tags);
163
+ ddog_Vec_Tag_drop(tags);
159
164
  ENFORCE_TYPE(tag_name, T_STRING);
160
165
  ENFORCE_TYPE(tag_value, T_STRING);
161
166
  }
162
167
 
163
- ddprof_ffi_PushTagResult push_result =
164
- ddprof_ffi_Vec_tag_push(&tags, char_slice_from_ruby_string(tag_name), char_slice_from_ruby_string(tag_value));
165
-
166
- if (push_result.tag == DDPROF_FFI_PUSH_TAG_RESULT_ERR) {
167
- VALUE err_details = ruby_string_from_vec_u8(push_result.err);
168
- ddprof_ffi_PushTagResult_drop(push_result);
168
+ ddog_Vec_Tag_PushResult push_result =
169
+ ddog_Vec_Tag_push(&tags, char_slice_from_ruby_string(tag_name), char_slice_from_ruby_string(tag_value));
169
170
 
171
+ if (push_result.tag == DDOG_VEC_TAG_PUSH_RESULT_ERR) {
170
172
  // libdatadog validates tags and may catch invalid tags that ddtrace didn't actually catch.
171
173
  // We warn users about such tags, and then just ignore them.
172
- safely_log_failure_to_process_tag(tags, err_details);
173
- } else {
174
- ddprof_ffi_PushTagResult_drop(push_result);
174
+ safely_log_failure_to_process_tag(tags, get_error_details_and_drop(&push_result.err));
175
175
  }
176
176
  }
177
177
 
@@ -179,17 +179,21 @@ static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array) {
179
179
  }
180
180
 
181
181
  static VALUE log_failure_to_process_tag(VALUE err_details) {
182
+ VALUE datadog_module = rb_const_get(rb_cObject, rb_intern("Datadog"));
183
+ VALUE profiling_module = rb_const_get(datadog_module, rb_intern("Profiling"));
184
+ VALUE http_transport_class = rb_const_get(profiling_module, rb_intern("HttpTransport"));
185
+
182
186
  return rb_funcall(http_transport_class, log_failure_to_process_tag_id, 1, err_details);
183
187
  }
184
188
 
185
189
  // Since we are calling into Ruby code, it may raise an exception. This method ensure that dynamically-allocated tags
186
190
  // get cleaned before propagating the exception.
187
- static void safely_log_failure_to_process_tag(ddprof_ffi_Vec_tag tags, VALUE err_details) {
191
+ static void safely_log_failure_to_process_tag(ddog_Vec_Tag tags, VALUE err_details) {
188
192
  int exception_state;
189
193
  rb_protect(log_failure_to_process_tag, err_details, &exception_state);
190
194
 
191
195
  if (exception_state) { // An exception was raised
192
- ddprof_ffi_Vec_tag_drop(tags); // clean up
196
+ ddog_Vec_Tag_drop(tags); // clean up
193
197
  rb_jump_tag(exception_state); // "Re-raise" exception
194
198
  }
195
199
  }
@@ -197,22 +201,39 @@ static void safely_log_failure_to_process_tag(ddprof_ffi_Vec_tag tags, VALUE err
197
201
  // Note: This function handles a bunch of libdatadog dynamically-allocated objects, so it MUST not use any Ruby APIs
198
202
  // which can raise exceptions, otherwise the objects will be leaked.
199
203
  static VALUE perform_export(
200
- ddprof_ffi_NewProfileExporterV3Result valid_exporter_result, // Must be called with a valid exporter result
201
- ddprof_ffi_Timespec start,
202
- ddprof_ffi_Timespec finish,
203
- ddprof_ffi_Slice_file slice_files,
204
- ddprof_ffi_Vec_tag *additional_tags,
204
+ ddog_prof_Exporter *exporter,
205
+ ddog_Timespec start,
206
+ ddog_Timespec finish,
207
+ ddog_prof_Exporter_Slice_File files_to_compress_and_export,
208
+ ddog_prof_Exporter_Slice_File files_to_export_unmodified,
209
+ ddog_Vec_Tag *additional_tags,
210
+ ddog_CharSlice internal_metadata,
205
211
  uint64_t timeout_milliseconds
206
212
  ) {
207
- ddprof_ffi_ProfileExporterV3 *exporter = valid_exporter_result.ok;
208
- ddprof_ffi_CancellationToken *cancel_token = ddprof_ffi_CancellationToken_new();
209
- ddprof_ffi_Request *request =
210
- ddprof_ffi_ProfileExporterV3_build(exporter, start, finish, slice_files, additional_tags, timeout_milliseconds);
213
+ ddog_prof_ProfiledEndpointsStats *endpoints_stats = NULL; // Not in use yet
214
+ ddog_prof_Exporter_Request_BuildResult build_result = ddog_prof_Exporter_Request_build(
215
+ exporter,
216
+ start,
217
+ finish,
218
+ files_to_compress_and_export,
219
+ files_to_export_unmodified,
220
+ additional_tags,
221
+ endpoints_stats,
222
+ &internal_metadata,
223
+ timeout_milliseconds
224
+ );
225
+
226
+ if (build_result.tag == DDOG_PROF_EXPORTER_REQUEST_BUILD_RESULT_ERR) {
227
+ ddog_prof_Exporter_drop(exporter);
228
+ return rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&build_result.err));
229
+ }
230
+
231
+ ddog_CancellationToken *cancel_token = ddog_CancellationToken_new();
211
232
 
212
233
  // We'll release the Global VM Lock while we're calling send, so that the Ruby VM can continue to work while this
213
234
  // is pending
214
235
  struct call_exporter_without_gvl_arguments args =
215
- {.exporter = exporter, .request = request, .cancel_token = cancel_token, .send_ran = false};
236
+ {.exporter = exporter, .build_result = &build_result, .cancel_token = cancel_token, .send_ran = false};
216
237
 
217
238
  // We use rb_thread_call_without_gvl2 instead of rb_thread_call_without_gvl as the gvl2 variant never raises any
218
239
  // exceptions.
@@ -236,27 +257,24 @@ static VALUE perform_export(
236
257
  }
237
258
 
238
259
  // Cleanup exporter and token, no longer needed
239
- ddprof_ffi_CancellationToken_drop(cancel_token);
240
- ddprof_ffi_NewProfileExporterV3Result_drop(valid_exporter_result);
260
+ ddog_CancellationToken_drop(cancel_token);
261
+ ddog_prof_Exporter_drop(exporter);
241
262
 
242
263
  if (pending_exception) {
243
264
  // If we got here send did not run, so we need to explicitly dispose of the request
244
- ddprof_ffi_Request_drop(request);
265
+ ddog_prof_Exporter_Request_drop(&build_result.ok);
245
266
 
246
267
  // Let Ruby propagate the exception. This will not return.
247
268
  rb_jump_tag(pending_exception);
248
269
  }
249
270
 
250
- ddprof_ffi_SendResult result = args.result;
251
- bool success = result.tag == DDPROF_FFI_SEND_RESULT_HTTP_RESPONSE;
271
+ // The request itself does not need to be freed as libdatadog takes ownership of it as part of sending.
252
272
 
253
- VALUE ruby_status = success ? ok_symbol : error_symbol;
254
- VALUE ruby_result = success ? UINT2NUM(result.http_response.code) : ruby_string_from_vec_u8(result.err);
273
+ ddog_prof_Exporter_SendResult result = args.result;
255
274
 
256
- ddprof_ffi_SendResult_drop(args.result);
257
- // The request itself does not need to be freed as libdatadog takes care of it as part of sending.
258
-
259
- return rb_ary_new_from_args(2, ruby_status, ruby_result);
275
+ return result.tag == DDOG_PROF_EXPORTER_SEND_RESULT_HTTP_RESPONSE ?
276
+ rb_ary_new_from_args(2, ok_symbol, UINT2NUM(result.http_response.code)) :
277
+ rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&result.err));
260
278
  }
261
279
 
262
280
  static VALUE _native_do_export(
@@ -271,7 +289,8 @@ static VALUE _native_do_export(
271
289
  VALUE pprof_data,
272
290
  VALUE code_provenance_file_name,
273
291
  VALUE code_provenance_data,
274
- VALUE tags_as_array
292
+ VALUE tags_as_array,
293
+ VALUE internal_metadata_json
275
294
  ) {
276
295
  ENFORCE_TYPE(upload_timeout_milliseconds, T_FIXNUM);
277
296
  ENFORCE_TYPE(start_timespec_seconds, T_FIXNUM);
@@ -281,6 +300,7 @@ static VALUE _native_do_export(
281
300
  ENFORCE_TYPE(pprof_file_name, T_STRING);
282
301
  ENFORCE_TYPE(pprof_data, T_STRING);
283
302
  ENFORCE_TYPE(code_provenance_file_name, T_STRING);
303
+ ENFORCE_TYPE(internal_metadata_json, T_STRING);
284
304
 
285
305
  // Code provenance can be disabled and in that case will be set to nil
286
306
  bool have_code_provenance = !NIL_P(code_provenance_data);
@@ -288,41 +308,56 @@ static VALUE _native_do_export(
288
308
 
289
309
  uint64_t timeout_milliseconds = NUM2ULONG(upload_timeout_milliseconds);
290
310
 
291
- ddprof_ffi_Timespec start =
311
+ ddog_Timespec start =
292
312
  {.seconds = NUM2LONG(start_timespec_seconds), .nanoseconds = NUM2UINT(start_timespec_nanoseconds)};
293
- ddprof_ffi_Timespec finish =
313
+ ddog_Timespec finish =
294
314
  {.seconds = NUM2LONG(finish_timespec_seconds), .nanoseconds = NUM2UINT(finish_timespec_nanoseconds)};
295
315
 
296
- int files_to_report = 1 + (have_code_provenance ? 1 : 0);
297
- ddprof_ffi_File files[files_to_report];
298
- ddprof_ffi_Slice_file slice_files = {.ptr = files, .len = files_to_report};
316
+ int to_compress_length = have_code_provenance ? 1 : 0;
317
+ ddog_prof_Exporter_File to_compress[to_compress_length];
318
+ int already_compressed_length = 1; // pprof
319
+ ddog_prof_Exporter_File already_compressed[already_compressed_length];
320
+
321
+ ddog_prof_Exporter_Slice_File files_to_compress_and_export = {.ptr = to_compress, .len = to_compress_length};
322
+ ddog_prof_Exporter_Slice_File files_to_export_unmodified = {.ptr = already_compressed, .len = already_compressed_length};
299
323
 
300
- files[0] = (ddprof_ffi_File) {
324
+ already_compressed[0] = (ddog_prof_Exporter_File) {
301
325
  .name = char_slice_from_ruby_string(pprof_file_name),
302
- .file = byte_slice_from_ruby_string(pprof_data)
326
+ .file = byte_slice_from_ruby_string(pprof_data),
303
327
  };
328
+
304
329
  if (have_code_provenance) {
305
- files[1] = (ddprof_ffi_File) {
330
+ to_compress[0] = (ddog_prof_Exporter_File) {
306
331
  .name = char_slice_from_ruby_string(code_provenance_file_name),
307
- .file = byte_slice_from_ruby_string(code_provenance_data)
332
+ .file = byte_slice_from_ruby_string(code_provenance_data),
308
333
  };
309
334
  }
310
335
 
311
- ddprof_ffi_Vec_tag *null_additional_tags = NULL;
336
+ ddog_Vec_Tag *null_additional_tags = NULL;
337
+ ddog_CharSlice internal_metadata = char_slice_from_ruby_string(internal_metadata_json);
312
338
 
313
- ddprof_ffi_NewProfileExporterV3Result exporter_result = create_exporter(exporter_configuration, tags_as_array);
339
+ ddog_prof_Exporter_NewResult exporter_result = create_exporter(exporter_configuration, tags_as_array);
314
340
  // Note: Do not add anything that can raise exceptions after this line, as otherwise the exporter memory will leak
315
341
 
316
342
  VALUE failure_tuple = handle_exporter_failure(exporter_result);
317
343
  if (!NIL_P(failure_tuple)) return failure_tuple;
318
344
 
319
- return perform_export(exporter_result, start, finish, slice_files, null_additional_tags, timeout_milliseconds);
345
+ return perform_export(
346
+ exporter_result.ok,
347
+ start,
348
+ finish,
349
+ files_to_compress_and_export,
350
+ files_to_export_unmodified,
351
+ null_additional_tags,
352
+ internal_metadata,
353
+ timeout_milliseconds
354
+ );
320
355
  }
321
356
 
322
357
  static void *call_exporter_without_gvl(void *call_args) {
323
358
  struct call_exporter_without_gvl_arguments *args = (struct call_exporter_without_gvl_arguments*) call_args;
324
359
 
325
- args->result = ddprof_ffi_ProfileExporterV3_send(args->exporter, args->request, args->cancel_token);
360
+ args->result = ddog_prof_Exporter_send(args->exporter, &args->build_result->ok, args->cancel_token);
326
361
  args->send_ran = true;
327
362
 
328
363
  return NULL; // Unused
@@ -330,5 +365,15 @@ static void *call_exporter_without_gvl(void *call_args) {
330
365
 
331
366
  // Called by Ruby when it wants to interrupt call_exporter_without_gvl above, e.g. when the app wants to exit cleanly
332
367
  static void interrupt_exporter_call(void *cancel_token) {
333
- ddprof_ffi_CancellationToken_cancel((ddprof_ffi_CancellationToken *) cancel_token);
368
+ ddog_CancellationToken_cancel((ddog_CancellationToken *) cancel_token);
369
+ }
370
+
371
+ static VALUE ddtrace_version(void) {
372
+ VALUE ddtrace_module = rb_const_get(rb_cObject, rb_intern("DDTrace"));
373
+ ENFORCE_TYPE(ddtrace_module, T_MODULE);
374
+ VALUE version_module = rb_const_get(ddtrace_module, rb_intern("VERSION"));
375
+ ENFORCE_TYPE(version_module, T_MODULE);
376
+ VALUE version_string = rb_const_get(version_module, rb_intern("STRING"));
377
+ ENFORCE_TYPE(version_string, T_STRING);
378
+ return version_string;
334
379
  }
@@ -0,0 +1,62 @@
1
+ #include "libdatadog_helpers.h"
2
+
3
+ #include <ruby.h>
4
+
5
+ const char *ruby_value_type_to_string(enum ruby_value_type type) {
6
+ return ruby_value_type_to_char_slice(type).ptr;
7
+ }
8
+
9
+ ddog_CharSlice ruby_value_type_to_char_slice(enum ruby_value_type type) {
10
+ switch (type) {
11
+ case(RUBY_T_NONE ): return DDOG_CHARSLICE_C("T_NONE");
12
+ case(RUBY_T_OBJECT ): return DDOG_CHARSLICE_C("T_OBJECT");
13
+ case(RUBY_T_CLASS ): return DDOG_CHARSLICE_C("T_CLASS");
14
+ case(RUBY_T_MODULE ): return DDOG_CHARSLICE_C("T_MODULE");
15
+ case(RUBY_T_FLOAT ): return DDOG_CHARSLICE_C("T_FLOAT");
16
+ case(RUBY_T_STRING ): return DDOG_CHARSLICE_C("T_STRING");
17
+ case(RUBY_T_REGEXP ): return DDOG_CHARSLICE_C("T_REGEXP");
18
+ case(RUBY_T_ARRAY ): return DDOG_CHARSLICE_C("T_ARRAY");
19
+ case(RUBY_T_HASH ): return DDOG_CHARSLICE_C("T_HASH");
20
+ case(RUBY_T_STRUCT ): return DDOG_CHARSLICE_C("T_STRUCT");
21
+ case(RUBY_T_BIGNUM ): return DDOG_CHARSLICE_C("T_BIGNUM");
22
+ case(RUBY_T_FILE ): return DDOG_CHARSLICE_C("T_FILE");
23
+ case(RUBY_T_DATA ): return DDOG_CHARSLICE_C("T_DATA");
24
+ case(RUBY_T_MATCH ): return DDOG_CHARSLICE_C("T_MATCH");
25
+ case(RUBY_T_COMPLEX ): return DDOG_CHARSLICE_C("T_COMPLEX");
26
+ case(RUBY_T_RATIONAL): return DDOG_CHARSLICE_C("T_RATIONAL");
27
+ case(RUBY_T_NIL ): return DDOG_CHARSLICE_C("T_NIL");
28
+ case(RUBY_T_TRUE ): return DDOG_CHARSLICE_C("T_TRUE");
29
+ case(RUBY_T_FALSE ): return DDOG_CHARSLICE_C("T_FALSE");
30
+ case(RUBY_T_SYMBOL ): return DDOG_CHARSLICE_C("T_SYMBOL");
31
+ case(RUBY_T_FIXNUM ): return DDOG_CHARSLICE_C("T_FIXNUM");
32
+ case(RUBY_T_UNDEF ): return DDOG_CHARSLICE_C("T_UNDEF");
33
+ case(RUBY_T_IMEMO ): return DDOG_CHARSLICE_C("T_IMEMO");
34
+ case(RUBY_T_NODE ): return DDOG_CHARSLICE_C("T_NODE");
35
+ case(RUBY_T_ICLASS ): return DDOG_CHARSLICE_C("T_ICLASS");
36
+ case(RUBY_T_ZOMBIE ): return DDOG_CHARSLICE_C("T_ZOMBIE");
37
+ #ifndef NO_T_MOVED
38
+ case(RUBY_T_MOVED ): return DDOG_CHARSLICE_C("T_MOVED");
39
+ #endif
40
+ default: return DDOG_CHARSLICE_C("BUG: Unknown value for ruby_value_type");
41
+ }
42
+ }
43
+
44
+ size_t read_ddogerr_string_and_drop(ddog_Error *error, char *string, size_t capacity) {
45
+ if (capacity == 0 || string == NULL) {
46
+ // short-circuit, we can't write anything
47
+ ddog_Error_drop(error);
48
+ return 0;
49
+ }
50
+
51
+ ddog_CharSlice error_msg_slice = ddog_Error_message(error);
52
+ size_t error_msg_size = error_msg_slice.len;
53
+ // Account for extra null char for proper cstring
54
+ if (error_msg_size >= capacity) {
55
+ // Error message too big, lets truncate it to capacity - 1 to allow for extra null at end
56
+ error_msg_size = capacity - 1;
57
+ }
58
+ strncpy(string, error_msg_slice.ptr, error_msg_size);
59
+ string[error_msg_size] = '\0';
60
+ ddog_Error_drop(error);
61
+ return error_msg_size;
62
+ }