datadog 2.12.0 → 2.22.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 (570) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +348 -1
  3. data/README.md +0 -1
  4. data/ext/LIBDATADOG_DEVELOPMENT.md +60 -0
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
  7. data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
  8. data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
  9. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +78 -26
  10. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  11. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
  12. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
  13. data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
  14. data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
  15. data/ext/datadog_profiling_native_extension/extconf.rb +10 -0
  16. data/ext/datadog_profiling_native_extension/heap_recorder.c +247 -364
  17. data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
  18. data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
  19. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  20. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +41 -21
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
  23. data/ext/datadog_profiling_native_extension/profiling.c +2 -0
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
  25. data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
  26. data/ext/datadog_profiling_native_extension/stack_recorder.c +173 -76
  27. data/ext/libdatadog_api/crashtracker.c +11 -12
  28. data/ext/libdatadog_api/crashtracker.h +5 -0
  29. data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
  30. data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
  31. data/ext/libdatadog_api/ddsketch.c +106 -0
  32. data/ext/libdatadog_api/extconf.rb +5 -3
  33. data/ext/libdatadog_api/init.c +18 -0
  34. data/ext/libdatadog_api/library_config.c +172 -0
  35. data/ext/libdatadog_api/library_config.h +25 -0
  36. data/ext/libdatadog_api/process_discovery.c +118 -0
  37. data/ext/libdatadog_api/process_discovery.h +5 -0
  38. data/ext/libdatadog_extconf_helpers.rb +15 -5
  39. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
  40. data/lib/datadog/appsec/actions_handler.rb +24 -2
  41. data/lib/datadog/appsec/anonymizer.rb +16 -0
  42. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
  43. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
  44. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
  45. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
  46. data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
  47. data/lib/datadog/appsec/api_security/lru_cache.rb +56 -0
  48. data/lib/datadog/appsec/api_security/route_extractor.rb +75 -0
  49. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  50. data/lib/datadog/appsec/api_security.rb +23 -0
  51. data/lib/datadog/appsec/assets/waf_rules/README.md +44 -5
  52. data/lib/datadog/appsec/assets/waf_rules/recommended.json +601 -74
  53. data/lib/datadog/appsec/assets/waf_rules/strict.json +48 -75
  54. data/lib/datadog/appsec/autoload.rb +2 -2
  55. data/lib/datadog/appsec/component.rb +46 -71
  56. data/lib/datadog/appsec/compressed_json.rb +40 -0
  57. data/lib/datadog/appsec/configuration/settings.rb +162 -30
  58. data/lib/datadog/appsec/context.rb +30 -7
  59. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +35 -18
  60. data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
  61. data/lib/datadog/appsec/contrib/active_record/patcher.rb +62 -11
  62. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  63. data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
  64. data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
  65. data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
  66. data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
  67. data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
  68. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +103 -0
  69. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +70 -0
  70. data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
  71. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
  72. data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
  73. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +11 -12
  74. data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
  75. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +10 -10
  76. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +10 -9
  77. data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
  78. data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
  79. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +53 -31
  80. data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
  81. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +52 -44
  82. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +35 -11
  83. data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
  84. data/lib/datadog/appsec/contrib/rails/patcher.rb +65 -47
  85. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  86. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  87. data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
  88. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +12 -12
  89. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +45 -22
  90. data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
  91. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  92. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  93. data/lib/datadog/appsec/event.rb +91 -147
  94. data/lib/datadog/appsec/ext.rb +4 -2
  95. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +23 -2
  96. data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
  97. data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
  98. data/lib/datadog/appsec/metrics/collector.rb +23 -3
  99. data/lib/datadog/appsec/metrics/telemetry.rb +2 -2
  100. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +29 -0
  101. data/lib/datadog/appsec/metrics.rb +1 -0
  102. data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
  103. data/lib/datadog/appsec/processor/rule_loader.rb +30 -33
  104. data/lib/datadog/appsec/remote.rb +43 -59
  105. data/lib/datadog/appsec/response.rb +6 -6
  106. data/lib/datadog/appsec/security_engine/engine.rb +176 -0
  107. data/lib/datadog/appsec/security_engine/result.rb +44 -9
  108. data/lib/datadog/appsec/security_engine/runner.rb +44 -21
  109. data/lib/datadog/appsec/security_event.rb +37 -0
  110. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  111. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  112. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  113. data/lib/datadog/appsec/utils.rb +0 -2
  114. data/lib/datadog/appsec.rb +5 -15
  115. data/lib/datadog/auto_instrument_base.rb +2 -1
  116. data/lib/datadog/core/buffer/random.rb +18 -2
  117. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  118. data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -50
  119. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
  120. data/lib/datadog/core/configuration/components.rb +69 -37
  121. data/lib/datadog/core/configuration/components_state.rb +23 -0
  122. data/lib/datadog/core/configuration/config_helper.rb +100 -0
  123. data/lib/datadog/core/configuration/deprecations.rb +36 -0
  124. data/lib/datadog/core/configuration/ext.rb +4 -1
  125. data/lib/datadog/core/configuration/option.rb +117 -77
  126. data/lib/datadog/core/configuration/option_definition.rb +5 -14
  127. data/lib/datadog/core/configuration/options.rb +15 -13
  128. data/lib/datadog/core/configuration/settings.rb +117 -48
  129. data/lib/datadog/core/configuration/stable_config.rb +32 -0
  130. data/lib/datadog/core/configuration/supported_configurations.rb +337 -0
  131. data/lib/datadog/core/configuration.rb +40 -16
  132. data/lib/datadog/core/crashtracking/component.rb +3 -10
  133. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  134. data/lib/datadog/core/ddsketch.rb +21 -0
  135. data/lib/datadog/core/deprecations.rb +2 -2
  136. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  137. data/lib/datadog/core/encoding.rb +1 -1
  138. data/lib/datadog/core/environment/agent_info.rb +4 -3
  139. data/lib/datadog/core/environment/cgroup.rb +10 -12
  140. data/lib/datadog/core/environment/container.rb +38 -40
  141. data/lib/datadog/core/environment/ext.rb +6 -8
  142. data/lib/datadog/core/environment/git.rb +3 -2
  143. data/lib/datadog/core/environment/identity.rb +3 -3
  144. data/lib/datadog/core/environment/platform.rb +3 -3
  145. data/lib/datadog/core/environment/variable_helpers.rb +4 -4
  146. data/lib/datadog/core/environment/yjit.rb +2 -1
  147. data/lib/datadog/core/error.rb +11 -9
  148. data/lib/datadog/core/logger.rb +2 -2
  149. data/lib/datadog/core/metrics/client.rb +29 -29
  150. data/lib/datadog/core/metrics/logging.rb +5 -5
  151. data/lib/datadog/core/pin.rb +4 -8
  152. data/lib/datadog/core/process_discovery/tracer_memfd.rb +13 -0
  153. data/lib/datadog/core/process_discovery.rb +61 -0
  154. data/lib/datadog/core/rate_limiter.rb +4 -2
  155. data/lib/datadog/core/remote/client.rb +44 -35
  156. data/lib/datadog/core/remote/component.rb +12 -17
  157. data/lib/datadog/core/remote/configuration/digest.rb +7 -7
  158. data/lib/datadog/core/remote/configuration/path.rb +1 -1
  159. data/lib/datadog/core/remote/configuration/repository.rb +14 -1
  160. data/lib/datadog/core/remote/negotiation.rb +9 -9
  161. data/lib/datadog/core/remote/transport/config.rb +4 -3
  162. data/lib/datadog/core/remote/transport/http/client.rb +5 -4
  163. data/lib/datadog/core/remote/transport/http/config.rb +27 -37
  164. data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
  165. data/lib/datadog/core/remote/transport/http.rb +25 -89
  166. data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
  167. data/lib/datadog/core/runtime/ext.rb +0 -1
  168. data/lib/datadog/core/runtime/metrics.rb +12 -5
  169. data/lib/datadog/core/tag_builder.rb +56 -0
  170. data/lib/datadog/core/telemetry/component.rb +92 -52
  171. data/lib/datadog/core/telemetry/emitter.rb +23 -11
  172. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +66 -0
  173. data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
  174. data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
  175. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
  176. data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
  177. data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
  178. data/lib/datadog/core/telemetry/event/app_started.rb +287 -0
  179. data/lib/datadog/core/telemetry/event/base.rb +40 -0
  180. data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
  181. data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
  182. data/lib/datadog/core/telemetry/event/log.rb +76 -0
  183. data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
  184. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
  185. data/lib/datadog/core/telemetry/event.rb +18 -472
  186. data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
  187. data/lib/datadog/core/telemetry/logger.rb +5 -4
  188. data/lib/datadog/core/telemetry/logging.rb +11 -5
  189. data/lib/datadog/core/telemetry/metric.rb +8 -8
  190. data/lib/datadog/core/telemetry/request.rb +4 -4
  191. data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
  192. data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
  193. data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
  194. data/lib/datadog/core/telemetry/transport/http.rb +63 -0
  195. data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
  196. data/lib/datadog/core/telemetry/worker.rb +90 -24
  197. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  198. data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
  199. data/lib/datadog/core/transport/http/api/instance.rb +17 -0
  200. data/lib/datadog/core/transport/http/api/spec.rb +17 -0
  201. data/lib/datadog/core/transport/http/builder.rb +19 -17
  202. data/lib/datadog/core/transport/http/env.rb +8 -0
  203. data/lib/datadog/core/transport/http.rb +75 -0
  204. data/lib/datadog/core/transport/response.rb +4 -1
  205. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
  206. data/lib/datadog/core/utils/duration.rb +32 -32
  207. data/lib/datadog/core/utils/forking.rb +2 -2
  208. data/lib/datadog/core/utils/network.rb +25 -6
  209. data/lib/datadog/core/utils/only_once_successful.rb +16 -5
  210. data/lib/datadog/core/utils/time.rb +20 -0
  211. data/lib/datadog/core/utils/truncation.rb +21 -0
  212. data/lib/datadog/core/utils.rb +7 -0
  213. data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
  214. data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
  215. data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
  216. data/lib/datadog/core/worker.rb +1 -1
  217. data/lib/datadog/core/workers/async.rb +29 -12
  218. data/lib/datadog/core/workers/interval_loop.rb +12 -1
  219. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  220. data/lib/datadog/core.rb +10 -0
  221. data/lib/datadog/di/boot.rb +43 -0
  222. data/lib/datadog/di/component.rb +21 -2
  223. data/lib/datadog/di/context.rb +70 -0
  224. data/lib/datadog/di/el/compiler.rb +164 -0
  225. data/lib/datadog/di/el/evaluator.rb +159 -0
  226. data/lib/datadog/di/el/expression.rb +42 -0
  227. data/lib/datadog/di/el.rb +5 -0
  228. data/lib/datadog/di/error.rb +25 -0
  229. data/lib/datadog/di/instrumenter.rb +132 -20
  230. data/lib/datadog/di/probe.rb +35 -15
  231. data/lib/datadog/di/probe_builder.rb +39 -1
  232. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  233. data/lib/datadog/di/probe_file_loader.rb +82 -0
  234. data/lib/datadog/di/probe_manager.rb +3 -2
  235. data/lib/datadog/di/probe_notification_builder.rb +61 -67
  236. data/lib/datadog/di/probe_notifier_worker.rb +25 -17
  237. data/lib/datadog/di/remote.rb +5 -5
  238. data/lib/datadog/di/serializer.rb +160 -8
  239. data/lib/datadog/di/transport/diagnostics.rb +4 -3
  240. data/lib/datadog/di/transport/http/api.rb +2 -12
  241. data/lib/datadog/di/transport/http/client.rb +4 -3
  242. data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
  243. data/lib/datadog/di/transport/http/input.rb +18 -35
  244. data/lib/datadog/di/transport/http.rb +15 -77
  245. data/lib/datadog/di/transport/input.rb +14 -5
  246. data/lib/datadog/di/utils.rb +5 -0
  247. data/lib/datadog/di.rb +0 -34
  248. data/lib/datadog/error_tracking/collector.rb +87 -0
  249. data/lib/datadog/error_tracking/component.rb +167 -0
  250. data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
  251. data/lib/datadog/error_tracking/configuration.rb +11 -0
  252. data/lib/datadog/error_tracking/ext.rb +18 -0
  253. data/lib/datadog/error_tracking/extensions.rb +16 -0
  254. data/lib/datadog/error_tracking/filters.rb +77 -0
  255. data/lib/datadog/error_tracking.rb +18 -0
  256. data/lib/datadog/kit/appsec/events/v2.rb +196 -0
  257. data/lib/datadog/kit/appsec/events.rb +17 -4
  258. data/lib/datadog/kit/identity.rb +22 -12
  259. data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
  260. data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
  261. data/lib/datadog/opentelemetry/api/context.rb +21 -6
  262. data/lib/datadog/opentelemetry/sdk/configurator.rb +1 -1
  263. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  264. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  265. data/lib/datadog/opentelemetry/sdk/trace/span.rb +15 -11
  266. data/lib/datadog/opentelemetry/trace.rb +4 -4
  267. data/lib/datadog/opentelemetry.rb +2 -1
  268. data/lib/datadog/profiling/collectors/code_provenance.rb +18 -9
  269. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
  270. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  271. data/lib/datadog/profiling/collectors/info.rb +44 -0
  272. data/lib/datadog/profiling/collectors/thread_context.rb +17 -2
  273. data/lib/datadog/profiling/component.rb +8 -9
  274. data/lib/datadog/profiling/encoded_profile.rb +11 -0
  275. data/lib/datadog/profiling/exporter.rb +12 -7
  276. data/lib/datadog/profiling/ext.rb +2 -15
  277. data/lib/datadog/profiling/flush.rb +5 -8
  278. data/lib/datadog/profiling/http_transport.rb +8 -62
  279. data/lib/datadog/profiling/profiler.rb +2 -0
  280. data/lib/datadog/profiling/scheduler.rb +10 -2
  281. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  282. data/lib/datadog/profiling/stack_recorder.rb +9 -9
  283. data/lib/datadog/profiling/tag_builder.rb +7 -41
  284. data/lib/datadog/profiling/tasks/exec.rb +2 -2
  285. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  286. data/lib/datadog/profiling.rb +13 -10
  287. data/lib/datadog/single_step_instrument.rb +9 -0
  288. data/lib/datadog/tracing/analytics.rb +1 -1
  289. data/lib/datadog/tracing/buffer.rb +7 -7
  290. data/lib/datadog/tracing/component.rb +21 -29
  291. data/lib/datadog/tracing/configuration/dynamic.rb +6 -8
  292. data/lib/datadog/tracing/configuration/ext.rb +8 -4
  293. data/lib/datadog/tracing/configuration/settings.rb +50 -12
  294. data/lib/datadog/tracing/context.rb +2 -2
  295. data/lib/datadog/tracing/context_provider.rb +1 -1
  296. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  297. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  298. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  299. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +19 -4
  300. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  301. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  302. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  303. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  304. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  305. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  306. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  307. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  308. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  309. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  310. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  311. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  312. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  313. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  314. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  315. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  316. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  317. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  318. data/lib/datadog/tracing/contrib/active_record/integration.rb +2 -2
  319. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  320. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +17 -8
  321. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
  322. data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
  323. data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
  324. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  325. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  326. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  327. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  328. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  329. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +12 -2
  330. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +8 -2
  331. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  332. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  333. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  334. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  335. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  336. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  337. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  338. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  339. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  340. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  341. data/lib/datadog/tracing/contrib/component.rb +2 -2
  342. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  343. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  344. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  345. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  346. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  347. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  348. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  349. data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
  350. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  351. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  352. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  353. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  354. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  355. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  356. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  357. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
  358. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  359. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  360. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  361. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  362. data/lib/datadog/tracing/contrib/excon/middleware.rb +7 -5
  363. data/lib/datadog/tracing/contrib/ext.rb +4 -3
  364. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  365. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  366. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  367. data/lib/datadog/tracing/contrib/faraday/middleware.rb +9 -5
  368. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  369. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  370. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
  371. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  372. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  373. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  374. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +84 -48
  375. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +15 -9
  376. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  377. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  378. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
  379. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  380. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  381. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  382. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  383. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  384. data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
  385. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  386. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
  387. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  388. data/lib/datadog/tracing/contrib/http/instrumentation.rb +11 -15
  389. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  390. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -19
  391. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  392. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  393. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +11 -19
  394. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  395. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  396. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  397. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  398. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  399. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  400. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  401. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  402. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  403. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  404. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  405. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  406. data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
  407. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
  408. data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
  409. data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
  410. data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
  411. data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
  412. data/lib/datadog/tracing/contrib/karafka.rb +37 -0
  413. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  414. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  415. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  416. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +9 -1
  417. data/lib/datadog/tracing/contrib/mongodb/ext.rb +2 -1
  418. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  419. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  420. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +23 -6
  421. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  422. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  423. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  424. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
  425. data/lib/datadog/tracing/contrib/opensearch/ext.rb +12 -2
  426. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  427. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -66
  428. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  429. data/lib/datadog/tracing/contrib/patcher.rb +12 -11
  430. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  431. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  432. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  433. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  434. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  435. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  436. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  437. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  438. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  439. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  440. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  441. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  442. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  443. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  444. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  445. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  446. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  447. data/lib/datadog/tracing/contrib/rack/request_queue.rb +4 -3
  448. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +7 -1
  449. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  450. data/lib/datadog/tracing/contrib/rails/ext.rb +2 -1
  451. data/lib/datadog/tracing/contrib/rails/integration.rb +2 -2
  452. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  453. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  454. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  455. data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
  456. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  457. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  458. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  459. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  460. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  461. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  462. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  463. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  464. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  465. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  466. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  467. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  468. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  469. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  470. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +8 -6
  471. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  472. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  473. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  474. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  475. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  476. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  477. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  478. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  479. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  480. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
  481. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
  482. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  483. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  484. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  485. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  486. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  487. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  488. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  489. data/lib/datadog/tracing/contrib/span_attribute_schema.rb +1 -1
  490. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  491. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  492. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  493. data/lib/datadog/tracing/contrib/support.rb +28 -0
  494. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  495. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  496. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  497. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  498. data/lib/datadog/tracing/contrib.rb +1 -0
  499. data/lib/datadog/tracing/correlation.rb +9 -2
  500. data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
  501. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  502. data/lib/datadog/tracing/distributed/b3_single.rb +2 -2
  503. data/lib/datadog/tracing/distributed/baggage.rb +196 -0
  504. data/lib/datadog/tracing/distributed/datadog.rb +8 -7
  505. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  506. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  507. data/lib/datadog/tracing/distributed/none.rb +4 -2
  508. data/lib/datadog/tracing/distributed/propagation.rb +28 -4
  509. data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
  510. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  511. data/lib/datadog/tracing/event.rb +5 -7
  512. data/lib/datadog/tracing/flush.rb +1 -1
  513. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  514. data/lib/datadog/tracing/metadata/errors.rb +4 -4
  515. data/lib/datadog/tracing/metadata/ext.rb +13 -0
  516. data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
  517. data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
  518. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  519. data/lib/datadog/tracing/metadata.rb +2 -0
  520. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  521. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  522. data/lib/datadog/tracing/pipeline.rb +1 -1
  523. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  524. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
  525. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  526. data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
  527. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  528. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  529. data/lib/datadog/tracing/span.rb +11 -2
  530. data/lib/datadog/tracing/span_event.rb +11 -11
  531. data/lib/datadog/tracing/span_link.rb +12 -12
  532. data/lib/datadog/tracing/span_operation.rb +76 -26
  533. data/lib/datadog/tracing/sync_writer.rb +5 -4
  534. data/lib/datadog/tracing/trace_digest.rb +29 -24
  535. data/lib/datadog/tracing/trace_operation.rb +121 -97
  536. data/lib/datadog/tracing/trace_segment.rb +8 -6
  537. data/lib/datadog/tracing/tracer.rb +90 -43
  538. data/lib/datadog/tracing/transport/http/api.rb +2 -10
  539. data/lib/datadog/tracing/transport/http/client.rb +6 -5
  540. data/lib/datadog/tracing/transport/http/traces.rb +15 -43
  541. data/lib/datadog/tracing/transport/http.rb +13 -75
  542. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  543. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  544. data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
  545. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  546. data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
  547. data/lib/datadog/tracing/transport/traces.rb +31 -14
  548. data/lib/datadog/tracing/utils.rb +1 -1
  549. data/lib/datadog/tracing/workers/trace_writer.rb +16 -16
  550. data/lib/datadog/tracing/workers.rb +2 -2
  551. data/lib/datadog/tracing/writer.rb +4 -4
  552. data/lib/datadog/tracing.rb +16 -3
  553. data/lib/datadog/version.rb +1 -1
  554. data/lib/datadog.rb +8 -2
  555. metadata +115 -24
  556. data/ext/libdatadog_api/macos_development.md +0 -26
  557. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -92
  558. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -114
  559. data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
  560. data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
  561. data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
  562. data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
  563. data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
  564. data/lib/datadog/appsec/processor/rule_merger.rb +0 -170
  565. data/lib/datadog/appsec/processor.rb +0 -107
  566. data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
  567. data/lib/datadog/core/telemetry/http/env.rb +0 -20
  568. data/lib/datadog/core/telemetry/http/ext.rb +0 -28
  569. data/lib/datadog/core/telemetry/http/response.rb +0 -70
  570. data/lib/datadog/core/telemetry/http/transport.rb +0 -90
@@ -19,7 +19,7 @@ module Datadog
19
19
  # Ensure Datadog-configure propagation styles have are applied when configured.
20
20
  #
21
21
  # DEV: Support configuring propagation through the environment variable
22
- # DEV: `OTEL_PROPAGATORS`, similar to `DD_TRACE_PROPAGATION*`?
22
+ # DEV: `OTEL_PROPAGATORS`, alias to `DD_TRACE_PROPAGATION_STYLE`
23
23
  def configure_propagation
24
24
  @propagators = [Propagator.new(Tracing::Contrib::HTTP)]
25
25
  super
@@ -54,10 +54,10 @@ module Datadog
54
54
  tracestate = Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_tracestate, digest)
55
55
  else
56
56
  trace_flags = if Tracing::Sampling::PrioritySampler.sampled?(digest.trace_sampling_priority)
57
- ::OpenTelemetry::Trace::TraceFlags::SAMPLED
58
- else
59
- ::OpenTelemetry::Trace::TraceFlags::DEFAULT
60
- end
57
+ ::OpenTelemetry::Trace::TraceFlags::SAMPLED
58
+ else
59
+ ::OpenTelemetry::Trace::TraceFlags::DEFAULT
60
+ end
61
61
  tracestate = ::OpenTelemetry::Trace::Tracestate::DEFAULT
62
62
  end
63
63
 
@@ -120,7 +120,7 @@ module Datadog
120
120
  # Some special attributes can override Datadog Span fields
121
121
  def span_arguments(span, attributes)
122
122
  if attributes.key?('analytics.event') && (analytics_event = attributes['analytics.event']).respond_to?(:casecmp)
123
- attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = analytics_event.casecmp('true') == 0 ? 1 : 0
123
+ attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = (analytics_event.casecmp('true') == 0) ? 1 : 0
124
124
  end
125
125
 
126
126
  if attributes.key?('http.response.status_code')
@@ -129,15 +129,15 @@ module Datadog
129
129
 
130
130
  attributes[Tracing::Metadata::Ext::TAG_KIND] = span.kind || 'internal'
131
131
 
132
- kwargs = { start_time: ns_to_time(span.start_timestamp) }
132
+ kwargs = {start_time: ns_to_time(span.start_timestamp)}
133
133
 
134
134
  name = if attributes.key?('operation.name')
135
- attributes['operation.name']
136
- elsif (rich_name = Datadog::OpenTelemetry::Trace::Span.enrich_name(span.kind, attributes))
137
- rich_name.downcase
138
- else
139
- span.kind
140
- end
135
+ attributes['operation.name']
136
+ elsif (rich_name = Datadog::OpenTelemetry::Trace::Span.enrich_name(span.kind, attributes))
137
+ rich_name.downcase
138
+ else
139
+ span.kind
140
+ end
141
141
 
142
142
  kwargs[:resource] = attributes.key?('resource.name') ? attributes['resource.name'] : span.name
143
143
  kwargs[:service] = attributes['service.name'] if attributes.key?('service.name')
@@ -38,14 +38,14 @@ module Datadog
38
38
  res
39
39
  end
40
40
 
41
- # `alias` performed to match {OpenTelemetry::SDK::Trace::Span} aliasing upstream
42
- alias []= set_attribute
41
+ # `alias` performed to match {::OpenTelemetry::SDK::Trace::Span} aliasing upstream
42
+ alias []= set_attribute # rubocop:disable Style/Alias
43
43
 
44
44
  # Attributes are equivalent to span tags and metrics.
45
45
  def add_attributes(attributes)
46
46
  res = super
47
47
  # Attributes can get dropped or their values truncated by `super`
48
- attributes.each { |key, _| datadog_set_attribute(key) }
48
+ attributes.each_key { |key| datadog_set_attribute(key) }
49
49
  res
50
50
  end
51
51
 
@@ -72,24 +72,24 @@ module Datadog
72
72
  return 'http.client.request' if kind == :client
73
73
  end
74
74
 
75
- return "#{attrs['db.system']}.query" if attrs.key?('db.system') && kind == :client
75
+ return "#{attrs["db.system"]}.query" if attrs.key?('db.system') && kind == :client
76
76
 
77
77
  if (attrs.key?('messaging.system') || attrs.key?('messaging.operation')) &&
78
78
  [:consumer, :producer, :server, :client].include?(kind)
79
79
 
80
- return "#{attrs['messaging.system']}.#{attrs['messaging.operation']}"
80
+ return "#{attrs["messaging.system"]}.#{attrs["messaging.operation"]}"
81
81
  end
82
82
 
83
83
  if attrs.key?('rpc.system')
84
84
  if attrs['rpc.system'] == 'aws-api' && kind == :client
85
85
  service = attrs['rpc.service']
86
- return "aws.#{service || 'client'}.request"
86
+ return "aws.#{service || "client"}.request"
87
87
  end
88
88
 
89
89
  if kind == :client
90
- return "#{attrs['rpc.system']}.client.request"
90
+ return "#{attrs["rpc.system"]}.client.request"
91
91
  elsif kind == :server
92
- return "#{attrs['rpc.system']}.server.request"
92
+ return "#{attrs["rpc.system"]}.server.request"
93
93
  end
94
94
  end
95
95
 
@@ -99,7 +99,7 @@ module Datadog
99
99
  return "#{provider}.#{name}.invoke"
100
100
  end
101
101
 
102
- return "#{attrs['faas.trigger']}.invoke" if attrs.key?('faas.trigger') && kind == :server
102
+ return "#{attrs["faas.trigger"]}.invoke" if attrs.key?('faas.trigger') && kind == :server
103
103
 
104
104
  return 'graphql.server.request' if attrs.key?('graphql.operation.type')
105
105
 
@@ -119,6 +119,7 @@ module Datadog
119
119
 
120
120
  private
121
121
 
122
+ # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
122
123
  def datadog_set_attribute(key)
123
124
  # Return if attributes are currently disabled by OpenTelemetry.
124
125
  return unless defined?(@attributes) && @attributes
@@ -149,9 +150,11 @@ module Datadog
149
150
  end
150
151
  end
151
152
  end
153
+ # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
152
154
 
153
155
  # Some special attributes can override Datadog Span fields beyond tags and metrics.
154
156
  # @return [Boolean] true if the key is a Datadog Span override attribute, false otherwise
157
+ # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
155
158
  def override_datadog_values(span, key, value)
156
159
  span.name = value if key == 'operation.name'
157
160
  span.resource = value if key == 'resource.name'
@@ -161,15 +164,16 @@ module Datadog
161
164
  if key == 'analytics.event' && value.respond_to?(:casecmp)
162
165
  Datadog::Tracing::Analytics.set_sample_rate(
163
166
  span,
164
- value.casecmp('true') == 0 ? 1 : 0
167
+ (value.casecmp('true') == 0) ? 1 : 0
165
168
  )
166
169
  end
167
170
 
168
171
  span.set_tag('http.status_code', value) if key == 'http.response.status_code'
169
172
  end
173
+ # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
170
174
 
171
175
  DATADOG_SPAN_ATTRIBUTE_OVERRIDES = ['analytics.event', 'operation.name', 'resource.name', 'service.name',
172
- 'span.type', 'http.response.status_code'].freeze
176
+ 'span.type', 'http.response.status_code'].freeze
173
177
 
174
178
  ::OpenTelemetry::SDK::Trace::Span.prepend(self)
175
179
  end
@@ -15,10 +15,10 @@ module Datadog
15
15
  # @return [TraceOperation]
16
16
  def start_trace_copy(trace, parent_span: nil)
17
17
  digest = if parent_span
18
- digest_with_parent_span(trace, parent_span)
19
- else
20
- trace.to_digest
21
- end
18
+ digest_with_parent_span(trace, parent_span)
19
+ else
20
+ trace.to_digest
21
+ end
22
22
 
23
23
  # Create a new TraceOperation, attached to the current Datadog Tracer.
24
24
  Datadog::Tracing.continue_trace!(digest)
@@ -13,6 +13,7 @@ require_relative 'tracing'
13
13
  require_relative 'tracing/contrib'
14
14
 
15
15
  require_relative 'opentelemetry/api/context'
16
+ require_relative 'opentelemetry/api/baggage'
16
17
 
17
18
  # DEV: Should this be a Contrib integration, that depends on the `opentelemetry-sdk`
18
19
  # DEV: and checks for compatibility?
@@ -29,7 +30,7 @@ module Datadog
29
30
 
30
31
  # Use `Datadog.logger` as the default logger
31
32
  def logger
32
- @logger ||= ::Datadog.logger
33
+ ::Datadog.logger
33
34
  end
34
35
 
35
36
  ::OpenTelemetry.singleton_class.prepend(self)
@@ -14,7 +14,10 @@ module Datadog
14
14
  #
15
15
  # This class acts both as a collector (collecting data) as well as a recorder (records/serializes it)
16
16
  class CodeProvenance
17
- def initialize(standard_library_path: RbConfig::CONFIG.fetch("rubylibdir"))
17
+ def initialize(
18
+ standard_library_path: RbConfig::CONFIG.fetch("rubylibdir"),
19
+ ruby_native_filename: Datadog::Profiling::Collectors::Stack._native_ruby_native_filename
20
+ )
18
21
  @libraries_by_name = {}
19
22
  @libraries_by_path = {}
20
23
  @seen_files = Set.new
@@ -26,6 +29,7 @@ module Datadog
26
29
  name: "stdlib",
27
30
  version: RUBY_VERSION,
28
31
  path: standard_library_path,
32
+ extra_path: ruby_native_filename,
29
33
  )
30
34
  )
31
35
  end
@@ -37,12 +41,8 @@ module Datadog
37
41
  self
38
42
  end
39
43
 
40
- def generate
41
- seen_libraries
42
- end
43
-
44
44
  def generate_json
45
- JSON.fast_generate(v1: seen_libraries.to_a)
45
+ JSON.generate(v1: seen_libraries.to_a)
46
46
  end
47
47
 
48
48
  private
@@ -79,7 +79,15 @@ module Datadog
79
79
  loaded_specs.each do |spec|
80
80
  next if libraries_by_name.key?(spec.name)
81
81
 
82
- record_library(Library.new(kind: "library", name: spec.name, version: spec.version, path: spec.gem_dir))
82
+ record_library(
83
+ Library.new(
84
+ kind: "library",
85
+ name: spec.name,
86
+ version: spec.version,
87
+ path: spec.gem_dir,
88
+ extra_path: (spec.extension_dir if spec.extensions.any?),
89
+ )
90
+ )
83
91
  recorded_library = true
84
92
  end
85
93
 
@@ -110,11 +118,12 @@ module Datadog
110
118
  class Library
111
119
  attr_reader :kind, :name, :version
112
120
 
113
- def initialize(kind:, name:, version:, path:)
121
+ def initialize(kind:, name:, version:, path:, extra_path: nil)
122
+ extra_path = nil if extra_path&.empty?
114
123
  @kind = kind.freeze
115
124
  @name = name.dup.freeze
116
125
  @version = version.to_s.dup.freeze
117
- @paths = [path.dup.freeze].freeze
126
+ @paths = [path.dup.freeze, extra_path.dup.freeze].compact.freeze
118
127
  freeze
119
128
  end
120
129
 
@@ -23,6 +23,7 @@ module Datadog
23
23
  allocation_profiling_enabled:,
24
24
  allocation_counting_enabled:,
25
25
  gvl_profiling_enabled:,
26
+ sighandler_sampling_enabled:,
26
27
  # **NOTE**: This should only be used for testing; disabling the dynamic sampling rate will increase the
27
28
  # profiler overhead!
28
29
  dynamic_sampling_rate_enabled: true,
@@ -33,6 +34,9 @@ module Datadog
33
34
  Datadog.logger.warn(
34
35
  "Profiling dynamic sampling rate disabled. This should only be used for testing, and will increase overhead!"
35
36
  )
37
+ Datadog::Core::Telemetry::Logger.error(
38
+ "Profiling dynamic sampling rate disabled. This should only be used for testing, and will increase overhead!"
39
+ )
36
40
  end
37
41
 
38
42
  self.class._native_initialize(
@@ -46,6 +50,7 @@ module Datadog
46
50
  allocation_profiling_enabled: allocation_profiling_enabled,
47
51
  allocation_counting_enabled: allocation_counting_enabled,
48
52
  gvl_profiling_enabled: gvl_profiling_enabled,
53
+ sighandler_sampling_enabled: sighandler_sampling_enabled,
49
54
  skip_idle_samples_for_testing: skip_idle_samples_for_testing,
50
55
  )
51
56
  @worker_thread = nil
@@ -77,6 +82,7 @@ module Datadog
77
82
  "Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
78
83
  )
79
84
  on_failure_proc&.call
85
+ Datadog::Core::Telemetry::Logger.report(e, description: "CpuAndWallTimeWorker thread error", pii_safe: true)
80
86
  end
81
87
  @worker_thread.name = self.class.name # Repeated from above to make sure thread gets named asap
82
88
  @worker_thread.thread_variable_set(:fork_safe, true)
@@ -41,6 +41,7 @@ module Datadog
41
41
  "IdleSamplingHelper thread error. " \
42
42
  "Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
43
43
  )
44
+ Datadog::Core::Telemetry::Logger.report(e, description: "IdleSamplingHelper thread error", pii_safe: true)
44
45
  end
45
46
  @worker_thread.name = self.class.name # Repeated from above to make sure thread gets named asap
46
47
  @worker_thread.thread_variable_set(:fork_safe, true)
@@ -28,9 +28,43 @@ module Datadog
28
28
 
29
29
  private
30
30
 
31
+ # Ruby GC tuning environment variables
32
+ RUBY_GC_TUNING_ENV_VARS = [
33
+ "RUBY_GC_HEAP_FREE_SLOTS",
34
+ "RUBY_GC_HEAP_GROWTH_FACTOR",
35
+ "RUBY_GC_HEAP_GROWTH_MAX_SLOTS",
36
+ "RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO",
37
+ "RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO",
38
+ "RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO",
39
+ "RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR",
40
+ "RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO",
41
+ "RUBY_GC_MALLOC_LIMIT",
42
+ "RUBY_GC_MALLOC_LIMIT_MAX",
43
+ "RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR",
44
+ "RUBY_GC_OLDMALLOC_LIMIT",
45
+ "RUBY_GC_OLDMALLOC_LIMIT_MAX",
46
+ "RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR",
47
+ # INIT_SLOTS changed for Ruby 3.3+:
48
+ # * https://bugs.ruby-lang.org/issues/19785
49
+ # * https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released/#:~:text=Removed%20environment%20variables
50
+ "RUBY_GC_HEAP_0_INIT_SLOTS",
51
+ "RUBY_GC_HEAP_1_INIT_SLOTS",
52
+ "RUBY_GC_HEAP_2_INIT_SLOTS",
53
+ "RUBY_GC_HEAP_3_INIT_SLOTS",
54
+ "RUBY_GC_HEAP_4_INIT_SLOTS",
55
+ # There was only one setting for older Rubies:
56
+ "RUBY_GC_HEAP_INIT_SLOTS",
57
+ # Ruby 2.x only, alias for others:
58
+ "RUBY_FREE_MIN",
59
+ "RUBY_HEAP_MIN_SLOTS",
60
+ ].freeze
61
+
31
62
  # Instead of trying to figure out real process start time by checking
32
63
  # /proc or some other complex/non-portable way, approximate start time
33
64
  # by time of requirement of this file.
65
+ #
66
+ # Note: this does not use Core::Utils::Time.now because this constant
67
+ # gets initialized before a user has a chance to configure the library.
34
68
  START_TIME = Time.now.utc.freeze
35
69
 
36
70
  def collect_platform_info
@@ -48,6 +82,7 @@ module Datadog
48
82
  engine: Datadog::Core::Environment::Identity.lang_engine,
49
83
  version: Datadog::Core::Environment::Identity.lang_version,
50
84
  platform: Datadog::Core::Environment::Identity.lang_platform,
85
+ gc_tuning: collect_gc_tuning_info,
51
86
  }.freeze
52
87
  end
53
88
 
@@ -106,6 +141,15 @@ module Datadog
106
141
  v.inspect
107
142
  end
108
143
  end
144
+
145
+ def collect_gc_tuning_info
146
+ return @gc_tuning_info if defined?(@gc_tuning_info)
147
+
148
+ @gc_tuning_info = RUBY_GC_TUNING_ENV_VARS.each_with_object({}) do |var, hash|
149
+ current_value = DATADOG_ENV[var]
150
+ hash[var.to_sym] = current_value if current_value
151
+ end.freeze
152
+ end
109
153
  end
110
154
  end
111
155
  end
@@ -21,7 +21,8 @@ module Datadog
21
21
  endpoint_collection_enabled:,
22
22
  timeline_enabled:,
23
23
  waiting_for_gvl_threshold_ns:,
24
- otel_context_enabled:
24
+ otel_context_enabled:,
25
+ native_filenames_enabled:
25
26
  )
26
27
  tracer_context_key = safely_extract_context_key_from(tracer)
27
28
  self.class._native_initialize(
@@ -33,6 +34,7 @@ module Datadog
33
34
  timeline_enabled: timeline_enabled,
34
35
  waiting_for_gvl_threshold_ns: waiting_for_gvl_threshold_ns,
35
36
  otel_context_enabled: otel_context_enabled,
37
+ native_filenames_enabled: validate_native_filenames(native_filenames_enabled),
36
38
  )
37
39
  end
38
40
 
@@ -44,6 +46,7 @@ module Datadog
44
46
  timeline_enabled: false,
45
47
  waiting_for_gvl_threshold_ns: 10_000_000,
46
48
  otel_context_enabled: false,
49
+ native_filenames_enabled: true,
47
50
  **options
48
51
  )
49
52
  new(
@@ -54,13 +57,14 @@ module Datadog
54
57
  timeline_enabled: timeline_enabled,
55
58
  waiting_for_gvl_threshold_ns: waiting_for_gvl_threshold_ns,
56
59
  otel_context_enabled: otel_context_enabled,
60
+ native_filenames_enabled: native_filenames_enabled,
57
61
  **options,
58
62
  )
59
63
  end
60
64
 
61
65
  def inspect
62
66
  # Compose Ruby's default inspect with our custom inspect for the native parts
63
- result = super()
67
+ result = super
64
68
  result[-1] = "#{self.class._native_inspect(self)}>"
65
69
  result
66
70
  end
@@ -81,6 +85,17 @@ module Datadog
81
85
  context = provider.instance_variable_get(:@context)
82
86
  context&.instance_variable_get(:@key)
83
87
  end
88
+
89
+ def validate_native_filenames(native_filenames_enabled)
90
+ if native_filenames_enabled && !Datadog::Profiling::Collectors::Stack._native_filenames_available?
91
+ Datadog.logger.debug(
92
+ "Native filenames are enabled, but the required dladdr API was not available. Disabling native filenames."
93
+ )
94
+ false
95
+ else
96
+ native_filenames_enabled
97
+ end
98
+ end
84
99
  end
85
100
  end
86
101
  end
@@ -67,6 +67,7 @@ module Datadog
67
67
  allocation_profiling_enabled: allocation_profiling_enabled,
68
68
  allocation_counting_enabled: settings.profiling.advanced.allocation_counting_enabled,
69
69
  gvl_profiling_enabled: enable_gvl_profiling?(settings, logger),
70
+ sighandler_sampling_enabled: settings.profiling.advanced.sighandler_sampling_enabled,
70
71
  )
71
72
 
72
73
  internal_metadata = {
@@ -96,6 +97,7 @@ module Datadog
96
97
  timeline_enabled: timeline_enabled,
97
98
  waiting_for_gvl_threshold_ns: settings.profiling.advanced.waiting_for_gvl_threshold_ns,
98
99
  otel_context_enabled: settings.profiling.advanced.preview_otel_context_enabled,
100
+ native_filenames_enabled: settings.profiling.advanced.native_filenames_enabled,
99
101
  )
100
102
  end
101
103
 
@@ -221,13 +223,14 @@ module Datadog
221
223
  end
222
224
 
223
225
  unless allocation_profiling_enabled
224
- raise ArgumentError, "Heap profiling requires allocation profiling to be enabled"
226
+ logger.warn(
227
+ "Heap profiling was requested but allocation profiling is not enabled. " \
228
+ "Heap profiling has been disabled."
229
+ )
230
+ return false
225
231
  end
226
232
 
227
- logger.warn(
228
- "Enabled experimental heap profiling: heap_sample_rate=#{heap_sample_rate}. This is experimental, not " \
229
- "recommended, and will increase overhead!"
230
- )
233
+ logger.debug("Enabled heap profiling: heap_sample_rate=#{heap_sample_rate}")
231
234
 
232
235
  true
233
236
  end
@@ -237,10 +240,6 @@ module Datadog
237
240
 
238
241
  return false unless heap_profiling_enabled && heap_size_profiling_enabled
239
242
 
240
- logger.warn(
241
- "Enabled experimental heap size profiling. This is experimental, not recommended, and will increase overhead!"
242
- )
243
-
244
243
  true
245
244
  end
246
245
 
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Profiling
5
+ # This class exists to wrap a ddog_prof_EncodedProfile into a Ruby object
6
+ #
7
+ # This class is not empty; all of this class is implemented as native code.
8
+ class EncodedProfile # rubocop:disable Lint/EmptyClass
9
+ end
10
+ end
11
+ end
@@ -26,7 +26,8 @@ module Datadog
26
26
  :last_flush_finish_at,
27
27
  :created_at,
28
28
  :internal_metadata,
29
- :info_json
29
+ :info_json,
30
+ :sequence_tracker
30
31
 
31
32
  public
32
33
 
@@ -37,7 +38,8 @@ module Datadog
37
38
  code_provenance_collector:,
38
39
  internal_metadata:,
39
40
  minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
40
- time_provider: Time
41
+ time_provider: Time,
42
+ sequence_tracker: Datadog::Profiling::SequenceTracker
41
43
  )
42
44
  @pprof_recorder = pprof_recorder
43
45
  @worker = worker
@@ -49,7 +51,8 @@ module Datadog
49
51
  @internal_metadata = internal_metadata
50
52
  # NOTE: At the time of this comment collected info does not change over time so we'll hardcode
51
53
  # it on startup to prevent serializing the same info on every flush.
52
- @info_json = JSON.fast_generate(info_collector.info).freeze
54
+ @info_json = JSON.generate(info_collector.info).freeze
55
+ @sequence_tracker = sequence_tracker
53
56
  end
54
57
 
55
58
  def flush
@@ -57,7 +60,7 @@ module Datadog
57
60
  serialization_result = pprof_recorder.serialize
58
61
  return if serialization_result.nil?
59
62
 
60
- start, finish, compressed_pprof, profile_stats = serialization_result
63
+ start, finish, encoded_profile, profile_stats = serialization_result
61
64
  @last_flush_finish_at = finish
62
65
 
63
66
  if duration_below_threshold?(start, finish)
@@ -70,11 +73,13 @@ module Datadog
70
73
  Flush.new(
71
74
  start: start,
72
75
  finish: finish,
73
- pprof_file_name: Datadog::Profiling::Ext::Transport::HTTP::PPROF_DEFAULT_FILENAME,
74
- pprof_data: compressed_pprof.to_s,
76
+ encoded_profile: encoded_profile,
75
77
  code_provenance_file_name: Datadog::Profiling::Ext::Transport::HTTP::CODE_PROVENANCE_FILENAME,
76
78
  code_provenance_data: uncompressed_code_provenance,
77
- tags_as_array: Datadog::Profiling::TagBuilder.call(settings: Datadog.configuration).to_a,
79
+ tags_as_array: Datadog::Profiling::TagBuilder.call(
80
+ settings: Datadog.configuration,
81
+ profile_seq: sequence_tracker.get_next,
82
+ ).to_a,
78
83
  internal_metadata: internal_metadata.merge(
79
84
  {
80
85
  worker_stats: worker_stats,
@@ -6,27 +6,14 @@ module Datadog
6
6
  ENV_ENABLED = "DD_PROFILING_ENABLED"
7
7
  ENV_UPLOAD_TIMEOUT = "DD_PROFILING_UPLOAD_TIMEOUT"
8
8
  ENV_MAX_FRAMES = "DD_PROFILING_MAX_FRAMES"
9
- ENV_AGENTLESS = "DD_PROFILING_AGENTLESS"
10
9
  ENV_ENDPOINT_COLLECTION_ENABLED = "DD_PROFILING_ENDPOINT_COLLECTION_ENABLED"
11
10
 
11
+ # WARNING: This should not be used, only for internal testing
12
+ ENV_AGENTLESS = "DD_PROFILING_AGENTLESS" # rubocop:disable CustomCops/EnvStringValidationCop
12
13
  module Transport
13
14
  module HTTP
14
- FORM_FIELD_TAG_ENV = "env"
15
- FORM_FIELD_TAG_HOST = "host"
16
- FORM_FIELD_TAG_LANGUAGE = "language"
17
- FORM_FIELD_TAG_PID = "process_id"
18
15
  FORM_FIELD_TAG_PROFILER_VERSION = "profiler_version"
19
- FORM_FIELD_TAG_RUNTIME = "runtime"
20
- FORM_FIELD_TAG_RUNTIME_ENGINE = "runtime_engine"
21
- FORM_FIELD_TAG_RUNTIME_ID = "runtime-id"
22
- FORM_FIELD_TAG_RUNTIME_PLATFORM = "runtime_platform"
23
- FORM_FIELD_TAG_RUNTIME_VERSION = "runtime_version"
24
- FORM_FIELD_TAG_SERVICE = "service"
25
- FORM_FIELD_TAG_VERSION = "version"
26
- TAG_GIT_REPOSITORY_URL = "git.repository_url"
27
- TAG_GIT_COMMIT_SHA = "git.commit.sha"
28
16
 
29
- PPROF_DEFAULT_FILENAME = "rubyprofile.pprof"
30
17
  CODE_PROVENANCE_FILENAME = "code-provenance.json"
31
18
  end
32
19
  end
@@ -9,10 +9,9 @@ module Datadog
9
9
  attr_reader \
10
10
  :start,
11
11
  :finish,
12
- :pprof_file_name,
13
- :pprof_data, # gzipped pprof bytes
12
+ :encoded_profile,
14
13
  :code_provenance_file_name,
15
- :code_provenance_data, # gzipped json bytes
14
+ :code_provenance_data,
16
15
  :tags_as_array,
17
16
  :internal_metadata_json,
18
17
  :info_json
@@ -20,8 +19,7 @@ module Datadog
20
19
  def initialize(
21
20
  start:,
22
21
  finish:,
23
- pprof_file_name:,
24
- pprof_data:,
22
+ encoded_profile:,
25
23
  code_provenance_file_name:,
26
24
  code_provenance_data:,
27
25
  tags_as_array:,
@@ -30,12 +28,11 @@ module Datadog
30
28
  )
31
29
  @start = start
32
30
  @finish = finish
33
- @pprof_file_name = pprof_file_name
34
- @pprof_data = pprof_data
31
+ @encoded_profile = encoded_profile
35
32
  @code_provenance_file_name = code_provenance_file_name
36
33
  @code_provenance_data = code_provenance_data
37
34
  @tags_as_array = tags_as_array
38
- @internal_metadata_json = JSON.fast_generate(internal_metadata)
35
+ @internal_metadata_json = JSON.generate(internal_metadata)
39
36
  @info_json = info_json
40
37
  end
41
38
  end