datadog 2.46.0 → 2.48.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 (286) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +56 -2
  3. data/LICENSE-3rdparty.csv +1 -0
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +143 -86
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +9 -1
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +6 -1
  7. data/ext/datadog_profiling_native_extension/extconf.rb +7 -13
  8. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -3
  9. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +67 -14
  10. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +8 -1
  11. data/ext/datadog_profiling_native_extension/profiling.c +1 -1
  12. data/ext/libdatadog_api/extconf.rb +9 -7
  13. data/ext/libdatadog_api/trace_exporter.c +34 -7
  14. data/ext/libdatadog_extconf_helpers.rb +2 -2
  15. data/lib/datadog/ai_guard/component.rb +1 -1
  16. data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +1 -9
  17. data/lib/datadog/ai_guard/contrib/rails/patcher.rb +1 -1
  18. data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +1 -1
  19. data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +3 -3
  20. data/lib/datadog/ai_guard/evaluation/client.rb +3 -3
  21. data/lib/datadog/ai_guard/evaluation.rb +2 -2
  22. data/lib/datadog/ai_guard/http_client.rb +3 -2
  23. data/lib/datadog/ai_guard/redaction.rb +1 -1
  24. data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +1 -1
  25. data/lib/datadog/appsec/assets/waf_rules/README.md +3 -3
  26. data/lib/datadog/appsec/assets/waf_rules/recommended.json +5366 -1517
  27. data/lib/datadog/appsec/assets/waf_rules/strict.json +2 -2
  28. data/lib/datadog/appsec/autoload.rb +1 -1
  29. data/lib/datadog/appsec/component.rb +1 -1
  30. data/lib/datadog/appsec/compressed_json.rb +1 -1
  31. data/lib/datadog/appsec/configuration.rb +3 -3
  32. data/lib/datadog/appsec/context.rb +1 -1
  33. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +11 -1
  34. data/lib/datadog/appsec/contrib/active_record/patcher.rb +12 -4
  35. data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +2 -2
  36. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +1 -1
  37. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  38. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +1 -1
  39. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +1 -1
  40. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
  41. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +1 -1
  42. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +1 -1
  43. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +7 -7
  44. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
  45. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +3 -3
  46. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -5
  47. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +31 -4
  48. data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
  49. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +8 -7
  50. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +1 -1
  51. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -5
  52. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +1 -1
  53. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +8 -7
  54. data/lib/datadog/appsec/metrics/collector.rb +5 -5
  55. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +3 -3
  56. data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -2
  57. data/lib/datadog/appsec/processor/rule_loader.rb +1 -1
  58. data/lib/datadog/appsec/response.rb +1 -1
  59. data/lib/datadog/appsec/security_engine/engine.rb +8 -7
  60. data/lib/datadog/appsec/security_engine/runner.rb +2 -2
  61. data/lib/datadog/appsec/trace_keeper.rb +1 -1
  62. data/lib/datadog/appsec.rb +1 -1
  63. data/lib/datadog/core/configuration/agent_settings_resolver.rb +14 -13
  64. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
  65. data/lib/datadog/core/configuration/components.rb +12 -11
  66. data/lib/datadog/core/configuration/components_state.rb +8 -1
  67. data/lib/datadog/core/configuration/settings.rb +5 -2
  68. data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
  69. data/lib/datadog/core/configuration.rb +2 -2
  70. data/lib/datadog/core/crashtracking/component.rb +1 -1
  71. data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
  72. data/lib/datadog/core/environment/cgroup.rb +2 -2
  73. data/lib/datadog/core/environment/container.rb +3 -3
  74. data/lib/datadog/core/metrics/client.rb +6 -6
  75. data/lib/datadog/core/process_discovery.rb +1 -1
  76. data/lib/datadog/core/remote/client.rb +44 -3
  77. data/lib/datadog/core/remote/dispatcher.rb +34 -3
  78. data/lib/datadog/core/remote/tie/tracing.rb +4 -3
  79. data/lib/datadog/core/remote/transport/http.rb +2 -2
  80. data/lib/datadog/core/runtime/metrics.rb +14 -14
  81. data/lib/datadog/core/semaphore.rb +3 -1
  82. data/lib/datadog/core/telemetry/event/app_started.rb +9 -9
  83. data/lib/datadog/core/telemetry/logger.rb +1 -1
  84. data/lib/datadog/core/telemetry/logging.rb +1 -1
  85. data/lib/datadog/core/telemetry/request.rb +9 -3
  86. data/lib/datadog/core/telemetry/transport/http.rb +2 -2
  87. data/lib/datadog/core/telemetry/worker.rb +1 -1
  88. data/lib/datadog/core/transport/http/adapters/net.rb +1 -1
  89. data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
  90. data/lib/datadog/core/transport/http/builder.rb +1 -1
  91. data/lib/datadog/core/transport/http.rb +3 -3
  92. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +2 -2
  93. data/lib/datadog/core/workers/async.rb +1 -1
  94. data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
  95. data/lib/datadog/data_streams/pathway_context.rb +1 -1
  96. data/lib/datadog/data_streams/processor.rb +48 -27
  97. data/lib/datadog/data_streams/transport/http.rb +1 -1
  98. data/lib/datadog/data_streams.rb +16 -0
  99. data/lib/datadog/di/capture_expression_evaluator.rb +48 -11
  100. data/lib/datadog/di/component.rb +73 -2
  101. data/lib/datadog/di/configuration.rb +19 -0
  102. data/lib/datadog/di/contrib/active_record.rb +1 -1
  103. data/lib/datadog/di/el/compiler.rb +4 -4
  104. data/lib/datadog/di/el/evaluator.rb +247 -43
  105. data/lib/datadog/di/el/expression.rb +36 -6
  106. data/lib/datadog/di/error.rb +16 -0
  107. data/lib/datadog/di/guardrails_telemetry/reason.rb +3 -2
  108. data/lib/datadog/di/instrumenter.rb +39 -10
  109. data/lib/datadog/di/probe_notification_builder.rb +58 -10
  110. data/lib/datadog/di/probe_notifier_worker.rb +1 -1
  111. data/lib/datadog/di/remote.rb +46 -2
  112. data/lib/datadog/di/serializer.rb +47 -13
  113. data/lib/datadog/di.rb +27 -0
  114. data/lib/datadog/error_tracking/component.rb +1 -1
  115. data/lib/datadog/error_tracking/configuration.rb +1 -1
  116. data/lib/datadog/kit/appsec/events/v2.rb +6 -6
  117. data/lib/datadog/kit/appsec/events.rb +1 -1
  118. data/lib/datadog/kit/enable_core_dumps.rb +1 -1
  119. data/lib/datadog/kit/identity.rb +1 -1
  120. data/lib/datadog/open_feature/activation.rb +26 -1
  121. data/lib/datadog/open_feature/agentless/configuration_source.rb +94 -15
  122. data/lib/datadog/open_feature/component.rb +22 -2
  123. data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +6 -0
  124. data/lib/datadog/open_feature/configuration.rb +10 -4
  125. data/lib/datadog/open_feature/evaluation_engine.rb +62 -4
  126. data/lib/datadog/open_feature/exposures/buffer.rb +4 -0
  127. data/lib/datadog/open_feature/exposures/reporter.rb +17 -4
  128. data/lib/datadog/open_feature/exposures/worker.rb +37 -6
  129. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +5 -5
  130. data/lib/datadog/open_feature/flag_evaluation/writer.rb +1 -1
  131. data/lib/datadog/open_feature/hooks/debug_logging_hook.rb +56 -0
  132. data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
  133. data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +2 -2
  134. data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +1 -1
  135. data/lib/datadog/open_feature/native_evaluator.rb +1 -1
  136. data/lib/datadog/open_feature/noop_evaluator.rb +1 -1
  137. data/lib/datadog/open_feature/provider.rb +69 -12
  138. data/lib/datadog/open_feature/remote.rb +8 -1
  139. data/lib/datadog/open_feature/resolution_details.rb +2 -2
  140. data/lib/datadog/open_feature/transport.rb +6 -6
  141. data/lib/datadog/opentelemetry/api/context.rb +3 -3
  142. data/lib/datadog/opentelemetry/logs.rb +5 -5
  143. data/lib/datadog/opentelemetry/metrics.rb +3 -3
  144. data/lib/datadog/opentelemetry/sdk/propagator.rb +3 -3
  145. data/lib/datadog/opentelemetry/sdk/span_processor.rb +2 -2
  146. data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
  147. data/lib/datadog/profiling/collectors/code_provenance.rb +3 -3
  148. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -4
  149. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
  150. data/lib/datadog/profiling/collectors/info.rb +37 -6
  151. data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
  152. data/lib/datadog/profiling/component.rb +41 -39
  153. data/lib/datadog/profiling/exporter.rb +4 -6
  154. data/lib/datadog/profiling/http_transport.rb +3 -3
  155. data/lib/datadog/profiling/profiler.rb +2 -2
  156. data/lib/datadog/profiling/scheduler.rb +2 -2
  157. data/lib/datadog/profiling/tag_builder.rb +1 -1
  158. data/lib/datadog/symbol_database/extractor.rb +8 -8
  159. data/lib/datadog/symbol_database/uploader.rb +1 -1
  160. data/lib/datadog/tracing/buffer.rb +3 -3
  161. data/lib/datadog/tracing/client_ip.rb +1 -1
  162. data/lib/datadog/tracing/component.rb +15 -10
  163. data/lib/datadog/tracing/configuration/dynamic/option.rb +2 -2
  164. data/lib/datadog/tracing/configuration/ext.rb +2 -0
  165. data/lib/datadog/tracing/configuration/settings.rb +14 -3
  166. data/lib/datadog/tracing/context.rb +1 -1
  167. data/lib/datadog/tracing/context_provider.rb +8 -0
  168. data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +2 -2
  169. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +27 -2
  170. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
  171. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -1
  172. data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
  173. data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -1
  174. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -1
  175. data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
  176. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
  177. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -1
  178. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
  179. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -1
  180. data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -1
  181. data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -2
  182. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -1
  183. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +3 -3
  184. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -1
  185. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +17 -12
  186. data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -1
  187. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -1
  188. data/lib/datadog/tracing/contrib/excon/middleware.rb +16 -9
  189. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -1
  190. data/lib/datadog/tracing/contrib/faraday/middleware.rb +14 -8
  191. data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -4
  192. data/lib/datadog/tracing/contrib/graphql/patcher.rb +1 -1
  193. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +3 -3
  194. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -1
  195. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
  196. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
  197. data/lib/datadog/tracing/contrib/grpc.rb +1 -1
  198. data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -1
  199. data/lib/datadog/tracing/contrib/hanami/plugin.rb +1 -1
  200. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  201. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -1
  202. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -1
  203. data/lib/datadog/tracing/contrib/http/instrumentation.rb +21 -6
  204. data/lib/datadog/tracing/contrib/http.rb +1 -1
  205. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -1
  206. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +14 -8
  207. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -1
  208. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +14 -8
  209. data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
  210. data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
  211. data/lib/datadog/tracing/contrib/karafka/monitor.rb +1 -1
  212. data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
  213. data/lib/datadog/tracing/contrib/karafka.rb +1 -1
  214. data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
  215. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
  216. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  217. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +1 -1
  218. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -1
  219. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -3
  220. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
  221. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +3 -3
  222. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +1 -1
  223. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +4 -4
  224. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -1
  225. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +4 -4
  226. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  227. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  228. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -1
  229. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +1 -1
  230. data/lib/datadog/tracing/contrib/racecar/events/message.rb +1 -1
  231. data/lib/datadog/tracing/contrib/rack/middlewares.rb +3 -3
  232. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  233. data/lib/datadog/tracing/contrib/rails/framework.rb +7 -7
  234. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  235. data/lib/datadog/tracing/contrib/rails/runner.rb +4 -4
  236. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -1
  237. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  238. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  239. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -1
  240. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +17 -10
  241. data/lib/datadog/tracing/contrib/sequel/database.rb +1 -1
  242. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  243. data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
  244. data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +2 -2
  245. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +2 -2
  246. data/lib/datadog/tracing/contrib/sidekiq.rb +1 -1
  247. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -1
  248. data/lib/datadog/tracing/contrib/status_range_env_parser.rb +1 -1
  249. data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -1
  250. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +1 -1
  251. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -3
  252. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +102 -0
  253. data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
  254. data/lib/datadog/tracing/contrib/waterdrop.rb +1 -1
  255. data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
  256. data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
  257. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  258. data/lib/datadog/tracing/distributed/baggage.rb +3 -3
  259. data/lib/datadog/tracing/distributed/datadog.rb +3 -3
  260. data/lib/datadog/tracing/distributed/propagation.rb +7 -7
  261. data/lib/datadog/tracing/distributed/trace_context.rb +1 -1
  262. data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +1 -1
  263. data/lib/datadog/tracing/otel_thread_context.rb +3 -3
  264. data/lib/datadog/tracing/pipeline.rb +1 -1
  265. data/lib/datadog/tracing/remote.rb +50 -19
  266. data/lib/datadog/tracing/sampling/priority_sampler.rb +1 -1
  267. data/lib/datadog/tracing/sampling/rule.rb +1 -1
  268. data/lib/datadog/tracing/sampling/rule_sampler.rb +1 -1
  269. data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
  270. data/lib/datadog/tracing/span_operation.rb +1 -1
  271. data/lib/datadog/tracing/trace_digest.rb +1 -1
  272. data/lib/datadog/tracing/trace_operation.rb +6 -6
  273. data/lib/datadog/tracing/tracer.rb +6 -6
  274. data/lib/datadog/tracing/transport/http/telemetry.rb +1 -1
  275. data/lib/datadog/tracing/transport/http.rb +2 -2
  276. data/lib/datadog/tracing/transport/io.rb +1 -1
  277. data/lib/datadog/tracing/transport/native.rb +3 -3
  278. data/lib/datadog/tracing/transport/statistics.rb +2 -2
  279. data/lib/datadog/tracing/transport/telemetry.rb +3 -1
  280. data/lib/datadog/tracing/transport/trace_formatter.rb +12 -12
  281. data/lib/datadog/tracing/transport/traces.rb +1 -1
  282. data/lib/datadog/tracing/utils.rb +1 -1
  283. data/lib/datadog/tracing/workers.rb +1 -1
  284. data/lib/datadog/version.rb +1 -1
  285. metadata +9 -8
  286. data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
@@ -21,14 +21,14 @@ module Datadog
21
21
  tracer = settings.tracing.instance
22
22
  return tracer unless tracer.nil?
23
23
 
24
+ sampler = build_sampler(settings)
25
+
24
26
  # Apply test mode settings if test mode is activated
25
27
  if settings.tracing.test_mode.enabled
26
28
  trace_flush = build_test_mode_trace_flush(settings)
27
- sampler = build_test_mode_sampler
28
29
  writer = build_test_mode_writer(settings, agent_settings)
29
30
  else
30
31
  trace_flush = build_trace_flush(settings)
31
- sampler = build_sampler(settings)
32
32
  writer = build_writer(settings, agent_settings)
33
33
  end
34
34
 
@@ -55,7 +55,7 @@ module Datadog
55
55
  def build_trace_flush(settings)
56
56
  if settings.tracing.partial_flush.enabled
57
57
  Tracing::Flush::Partial.new(
58
- min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold
58
+ min_spans_before_partial_flush: settings.tracing.partial_flush.min_spans_threshold,
59
59
  )
60
60
  else
61
61
  Tracing::Flush::Finished.new
@@ -76,7 +76,12 @@ module Datadog
76
76
  nil
77
77
  end
78
78
 
79
+ # Builds the sampler for the given settings: the sampler that keeps
80
+ # every trace when test mode is enabled, otherwise the sampler built
81
+ # from the custom sampler, sampling rules and rates.
79
82
  def build_sampler(settings)
83
+ return build_test_mode_sampler if settings.tracing.test_mode.enabled
84
+
80
85
  # A custom sampler is provided
81
86
  if (sampler = settings.tracing.sampler)
82
87
  return sampler
@@ -93,7 +98,7 @@ module Datadog
93
98
  post_sampler = Tracing::Sampling::RuleSampler.parse(
94
99
  rules,
95
100
  settings.tracing.sampling.rate_limit,
96
- settings.tracing.sampling.default_rate
101
+ settings.tracing.sampling.default_rate,
97
102
  )
98
103
  end
99
104
 
@@ -101,12 +106,12 @@ module Datadog
101
106
  # Used if no custom sampler is provided, or if sampling rule parsing fails.
102
107
  post_sampler ||= Tracing::Sampling::RuleSampler.new(
103
108
  rate_limit: settings.tracing.sampling.rate_limit,
104
- default_sample_rate: settings.tracing.sampling.default_rate
109
+ default_sample_rate: settings.tracing.sampling.default_rate,
105
110
  )
106
111
 
107
112
  Tracing::Sampling::PrioritySampler.new(
108
113
  base_sampler: Tracing::Sampling::AllSampler.new,
109
- post_sampler: post_sampler
114
+ post_sampler: post_sampler,
110
115
  )
111
116
  end
112
117
 
@@ -133,14 +138,14 @@ module Datadog
133
138
  unless Transport::Native.supported?
134
139
  Datadog.logger.warn(
135
140
  "Native transport requested but not available: #{Transport::Native::UNSUPPORTED_REASON}. " \
136
- "Falling back to default HTTP transport."
141
+ "Falling back to default HTTP transport.",
137
142
  )
138
143
  return nil
139
144
  end
140
145
 
141
146
  Transport::Native::Transport.new(
142
147
  agent_settings: agent_settings,
143
- logger: Datadog.logger
148
+ logger: Datadog.logger,
144
149
  )
145
150
  end
146
151
 
@@ -230,7 +235,7 @@ module Datadog
230
235
  def build_rate_limit_post_sampler(seconds:)
231
236
  Tracing::Sampling::RuleSampler.new(
232
237
  rate_limiter: Datadog::Core::TokenBucket.new(1.0 / seconds, 1.0),
233
- default_sample_rate: 1.0
238
+ default_sample_rate: 1.0,
234
239
  )
235
240
  end
236
241
 
@@ -246,7 +251,7 @@ module Datadog
246
251
  # Set priority sampler to ensure the agent doesn't drop any traces.
247
252
  Tracing::Sampling::PrioritySampler.new(
248
253
  base_sampler: Tracing::Sampling::AllSampler.new,
249
- post_sampler: Tracing::Sampling::AllSampler.new
254
+ post_sampler: Tracing::Sampling::AllSampler.new,
250
255
  )
251
256
  end
252
257
 
@@ -49,13 +49,13 @@ module Datadog
49
49
  # Restore the local configuration value
50
50
  configuration_object.unset_option(
51
51
  @setting_key,
52
- precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
52
+ precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION,
53
53
  )
54
54
  else
55
55
  configuration_object.set_option(
56
56
  @setting_key,
57
57
  value,
58
- precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION
58
+ precedence: Core::Configuration::Option::Precedence::REMOTE_CONFIGURATION,
59
59
  )
60
60
  end
61
61
 
@@ -128,6 +128,8 @@ module Datadog
128
128
  ENV_SERVER_ERROR_STATUSES = "DD_TRACE_HTTP_SERVER_ERROR_STATUSES"
129
129
  ENV_CLIENT_ERROR_STATUSES = "DD_TRACE_HTTP_CLIENT_ERROR_STATUSES"
130
130
  end
131
+
132
+ ENV_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE = "DD_TRACE_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE"
131
133
  end
132
134
  end
133
135
  end
@@ -57,7 +57,7 @@ module Datadog
57
57
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG,
58
58
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT,
59
59
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE,
60
- ]
60
+ ],
61
61
  )
62
62
  o.after_set do |styles|
63
63
  # Make values case-insensitive
@@ -446,7 +446,7 @@ module Datadog
446
446
  "Both DD_SPAN_SAMPLING_RULES and DD_SPAN_SAMPLING_RULES_FILE were provided: only " \
447
447
  "DD_SPAN_SAMPLING_RULES will be used. Please do not provide DD_SPAN_SAMPLING_RULES_FILE when " \
448
448
  "also providing DD_SPAN_SAMPLING_RULES as their configuration conflicts. " \
449
- "DD_SPAN_SAMPLING_RULES_FILE=#{rules_file} DD_SPAN_SAMPLING_RULES=#{rules}"
449
+ "DD_SPAN_SAMPLING_RULES_FILE=#{rules_file} DD_SPAN_SAMPLING_RULES=#{rules}",
450
450
  )
451
451
  end
452
452
  rules
@@ -457,7 +457,7 @@ module Datadog
457
457
  # `File#read` errors have clear and actionable messages, no need to add extra exception info.
458
458
  Datadog.logger.warn(
459
459
  "Cannot read span sampling rules file `#{rules_file}`: #{e.class}: #{e.message}." \
460
- "No span sampling rules will be applied."
460
+ "No span sampling rules will be applied.",
461
461
  )
462
462
  nil
463
463
  end
@@ -568,6 +568,17 @@ module Datadog
568
568
  o.default 512
569
569
  end
570
570
 
571
+ # Whether outbound HTTP client resource names include a quantized request path.
572
+ # URL tags and outgoing requests are unchanged.
573
+ #
574
+ # @default `DD_TRACE_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE` environment variable, otherwise `false`.
575
+ # @return [Boolean]
576
+ option :http_client_resource_name_quantize do |o|
577
+ o.env Tracing::Configuration::Ext::ENV_HTTP_CLIENT_RESOURCE_NAME_QUANTIZE
578
+ o.default false
579
+ o.type :bool
580
+ end
581
+
571
582
  # HTTP error statuses configuration
572
583
  # @public_api
573
584
  settings :http_error_statuses do
@@ -63,7 +63,7 @@ module Datadog
63
63
 
64
64
  self.class.new(
65
65
  trace: forked_trace,
66
- otel_thread_context: @otel_thread_context
66
+ otel_thread_context: @otel_thread_context,
67
67
  )
68
68
  end
69
69
 
@@ -21,6 +21,14 @@ module Datadog
21
21
  def context=(ctx)
22
22
  ctx.otel_thread_context = @otel_thread_context if ctx.respond_to?(:otel_thread_context=)
23
23
 
24
+ if (otel_thread_context = @otel_thread_context)
25
+ if (trace = ctx&.active_trace)
26
+ otel_thread_context.update_from_trace_op(trace)
27
+ else
28
+ otel_thread_context.clear
29
+ end
30
+ end
31
+
24
32
  @context.local = ctx
25
33
  end
26
34
 
@@ -39,14 +39,14 @@ module Datadog
39
39
  :subscribe,
40
40
  :around,
41
41
  ->(channel, block) { Tracer.trace(channel, :subscribe, &block) },
42
- prepend: true
42
+ prepend: true,
43
43
  )
44
44
 
45
45
  set_callback(
46
46
  :unsubscribe,
47
47
  :around,
48
48
  ->(channel, block) { Tracer.trace(channel, :unsubscribe, &block) },
49
- prepend: true
49
+ prepend: true,
50
50
  )
51
51
  end
52
52
  end
@@ -27,7 +27,7 @@ module Datadog
27
27
  Datadog::DataStreams.set_produce_checkpoint(
28
28
  type: Ext::TAG_COMPONENT,
29
29
  destination: queue_name,
30
- auto_instrumentation: true
30
+ auto_instrumentation: true,
31
31
  ) do |key, value|
32
32
  job_data[key] = value
33
33
  end
@@ -44,10 +44,14 @@ module Datadog
44
44
  return unless Datadog::DataStreams.enabled?
45
45
 
46
46
  begin
47
+ # false stands in for "thread had no context", leaving nil to mean nothing to restore.
48
+ @datadog_pathway_context_before_job = Datadog::DataStreams.pathway_context || false
49
+ # A headerless job would otherwise checkpoint into, and mutate, the saved context.
50
+ Datadog::DataStreams.pathway_context = nil
47
51
  Datadog::DataStreams.set_consume_checkpoint(
48
52
  type: Ext::TAG_COMPONENT,
49
53
  source: queue_name,
50
- auto_instrumentation: true
54
+ auto_instrumentation: true,
51
55
  ) do |key|
52
56
  job_data[key]
53
57
  end
@@ -55,6 +59,27 @@ module Datadog
55
59
  Datadog.logger.debug { "Error setting DSM consume checkpoint: #{e.class}: #{e.message}" }
56
60
  end
57
61
  end
62
+
63
+ # Adapters run `deserialize` then `perform_now` on a pooled worker thread. Restoring the
64
+ # pre-job context stops the job's pathway leaking into the thread's later, unrelated work.
65
+ def perform_now
66
+ super
67
+ ensure
68
+ restore_datadog_pathway_context
69
+ end
70
+
71
+ private
72
+
73
+ def restore_datadog_pathway_context
74
+ return if @datadog_pathway_context_before_job.nil?
75
+
76
+ # `|| nil` undoes the false sentinel set in `deserialize`.
77
+ context_before_job = @datadog_pathway_context_before_job || nil
78
+ @datadog_pathway_context_before_job = nil
79
+ Datadog::DataStreams.pathway_context = context_before_job
80
+ rescue => e
81
+ Datadog.logger.debug { "Error restoring DSM pathway context: #{e.class}: #{e.message}" }
82
+ end
58
83
  end
59
84
  end
60
85
  end
@@ -76,7 +76,7 @@ module Datadog
76
76
  #
77
77
  Datadog.logger.error(
78
78
  "Failed to resolve ActiveRecord database configuration. " \
79
- "Cause: #{e.class} Source: #{Array(e.backtrace).first}"
79
+ "Cause: #{e.class} Source: #{Array(e.backtrace).first}",
80
80
  )
81
81
  Core::Telemetry::Logger.report(e, description: "Failed to resolve ActiveRecord database configuration")
82
82
 
@@ -96,7 +96,7 @@ module Datadog
96
96
  rescue => e
97
97
  Datadog.logger.error(
98
98
  "Failed to resolve key #{matcher.inspect}. " \
99
- "Cause: #{e.class} Source: #{Array(e.backtrace).first}"
99
+ "Cause: #{e.class} Source: #{Array(e.backtrace).first}",
100
100
  )
101
101
  Core::Telemetry::Logger.report(e, description: "Failed to resolve key")
102
102
 
@@ -36,7 +36,7 @@ module Datadog
36
36
  o.default do
37
37
  Contrib::SpanAttributeSchema.fetch_service_name(
38
38
  "",
39
- Utils.adapter_name
39
+ Utils.adapter_name,
40
40
  )
41
41
  end
42
42
  end
@@ -77,7 +77,7 @@ module Datadog
77
77
  # in case.
78
78
  Datadog.logger.debug(
79
79
  "connection_id #{connection_id} does not represent a valid object. " \
80
- "Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}"
80
+ "Cause: #{e.class}: #{e.message} Source: #{Array(e.backtrace).first}",
81
81
  )
82
82
  end
83
83
  else
@@ -49,7 +49,7 @@ module Datadog
49
49
  Ext::SPAN_CACHE,
50
50
  type: Ext::SPAN_TYPE_CACHE,
51
51
  service: Datadog.configuration.tracing[:active_support][:cache_service],
52
- resource: action
52
+ resource: action,
53
53
  ) do |span|
54
54
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
55
55
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
@@ -35,7 +35,7 @@ module Datadog
35
35
  o.default do
36
36
  Contrib::SpanAttributeSchema.fetch_service_name(
37
37
  "",
38
- Ext::SERVICE_CACHE
38
+ Ext::SERVICE_CACHE,
39
39
  )
40
40
  end
41
41
  end
@@ -51,7 +51,7 @@ module Datadog
51
51
  span_options,
52
52
  on_start: on_start,
53
53
  on_finish: on_finish,
54
- trace: trace
54
+ trace: trace,
55
55
  ).tap do |subscription|
56
56
  subscription.subscribe(pattern)
57
57
  end
@@ -65,7 +65,7 @@ module Datadog
65
65
  span_options,
66
66
  on_start: on_start,
67
67
  on_finish: on_finish,
68
- trace: trace
68
+ trace: trace,
69
69
  ).tap do |subscription|
70
70
  subscriptions << subscription
71
71
  end
@@ -125,7 +125,7 @@ module Datadog
125
125
  @block&.call(span, name, id, payload)
126
126
  rescue => e
127
127
  Datadog.logger.debug(
128
- "ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}"
128
+ "ActiveSupport::Notifications handler for '#{name}' failed: #{e.class}: #{e.message}",
129
129
  )
130
130
  end
131
131
  end
@@ -147,7 +147,7 @@ module Datadog
147
147
  callback.call(event, key, *args)
148
148
  rescue => e
149
149
  Datadog.logger.debug(
150
- "ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}"
150
+ "ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.class}: #{e.message}",
151
151
  )
152
152
  end
153
153
  end
@@ -36,7 +36,7 @@ module Datadog
36
36
  o.default do
37
37
  Contrib::SpanAttributeSchema.fetch_service_name(
38
38
  Ext::ENV_SERVICE_NAME,
39
- Ext::DEFAULT_PEER_SERVICE_NAME
39
+ Ext::DEFAULT_PEER_SERVICE_NAME,
40
40
  )
41
41
  end
42
42
  end
@@ -58,7 +58,7 @@ module Datadog
58
58
  if configuration[:peer_service]
59
59
  span.set_tag(
60
60
  Tracing::Metadata::Ext::TAG_PEER_SERVICE,
61
- configuration[:peer_service]
61
+ configuration[:peer_service],
62
62
  )
63
63
  end
64
64
 
@@ -35,7 +35,7 @@ module Datadog
35
35
  o.default do
36
36
  Contrib::SpanAttributeSchema.fetch_service_name(
37
37
  Ext::ENV_SERVICE_NAME,
38
- Ext::DEFAULT_PEER_SERVICE_NAME
38
+ Ext::DEFAULT_PEER_SERVICE_NAME,
39
39
  )
40
40
  end
41
41
  end
@@ -28,7 +28,7 @@ module Datadog
28
28
  if datadog_configuration[:peer_service]
29
29
  span.set_tag(
30
30
  Tracing::Metadata::Ext::TAG_PEER_SERVICE,
31
- datadog_configuration[:peer_service]
31
+ datadog_configuration[:peer_service],
32
32
  )
33
33
  end
34
34
 
@@ -19,7 +19,7 @@ module Datadog
19
19
  Ext::SPAN_JOB,
20
20
  service: configuration[:service_name],
21
21
  resource: job_name(job),
22
- on_error: configuration[:on_error]
22
+ on_error: configuration[:on_error],
23
23
  ) do |span|
24
24
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
25
25
  set_sample_rate(span)
@@ -50,7 +50,7 @@ module Datadog
50
50
  Tracing.trace(
51
51
  Ext::SPAN_ENQUEUE,
52
52
  service: configuration[:client_service_name],
53
- resource: job_name(job)
53
+ resource: job_name(job),
54
54
  ) do |span|
55
55
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
56
56
  set_sample_rate(span)
@@ -40,7 +40,7 @@ module Datadog
40
40
  o.default do
41
41
  Contrib::SpanAttributeSchema.fetch_service_name(
42
42
  Ext::ENV_SERVICE_NAME,
43
- Ext::DEFAULT_PEER_SERVICE_NAME
43
+ Ext::DEFAULT_PEER_SERVICE_NAME,
44
44
  )
45
45
  end
46
46
  end
@@ -53,7 +53,7 @@ module Datadog
53
53
  Tracing.trace(
54
54
  Datadog::Tracing::Contrib::Elasticsearch::Ext::SPAN_QUERY,
55
55
  service: service,
56
- on_error: on_error
56
+ on_error: on_error,
57
57
  ) do |span|
58
58
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
59
59
  connection = transport.connections.first
@@ -63,7 +63,7 @@ module Datadog
63
63
  if datadog_configuration[:peer_service]
64
64
  span.set_tag(
65
65
  Tracing::Metadata::Ext::TAG_PEER_SERVICE,
66
- datadog_configuration[:peer_service]
66
+ datadog_configuration[:peer_service],
67
67
  )
68
68
  end
69
69
 
@@ -121,7 +121,7 @@ module Datadog
121
121
  quantize_options = datadog_configuration[:quantize]
122
122
  quantized_body = Datadog::Tracing::Contrib::Elasticsearch::Quantize.format_body(
123
123
  body,
124
- quantize_options
124
+ quantize_options,
125
125
  )
126
126
  span.set_tag(Datadog::Tracing::Contrib::Elasticsearch::Ext::TAG_BODY, quantized_body)
127
127
  end
@@ -43,7 +43,7 @@ module Datadog
43
43
  o.default do
44
44
  Contrib::SpanAttributeSchema.fetch_service_name(
45
45
  Ext::ENV_SERVICE_NAME,
46
- Ext::DEFAULT_PEER_SERVICE_NAME
46
+ Ext::DEFAULT_PEER_SERVICE_NAME,
47
47
  )
48
48
  end
49
49
  end
@@ -7,6 +7,7 @@ require_relative "../../metadata/ext"
7
7
  require_relative "../http"
8
8
  require_relative "ext"
9
9
  require_relative "../http_annotation_helper"
10
+ require_relative "../utils/quantization/http"
10
11
 
11
12
  module Datadog
12
13
  module Tracing
@@ -67,8 +68,8 @@ module Datadog
67
68
 
68
69
  @datadog_span.set_tags(
69
70
  Datadog.configuration.tracing.header_tags.response_tags(
70
- Core::Utils::Hash::CaseInsensitiveWrapper.new(parse_response_headers)
71
- )
71
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(parse_response_headers),
72
+ ),
72
73
  )
73
74
  ensure
74
75
  @datadog_span.finish
@@ -107,15 +108,15 @@ module Datadog
107
108
  Ext::SPAN_REQUEST,
108
109
  service: uri ? service_name(uri.host, datadog_configuration) : datadog_configuration[:service_name],
109
110
  type: Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND,
110
- **trace_options
111
+ **trace_options,
111
112
  )
112
113
  datadog_trace = Tracing.active_trace
113
114
 
114
- datadog_tag_request
115
+ datadog_tag_request(uri)
115
116
 
116
117
  if Tracing::Distributed::PropagationPolicy.enabled?(
117
118
  global_config: datadog_configuration,
118
- trace: datadog_trace
119
+ trace: datadog_trace,
119
120
  )
120
121
  @datadog_original_headers ||= {}
121
122
  Contrib::HTTP.inject(datadog_trace, @datadog_original_headers)
@@ -131,17 +132,22 @@ module Datadog
131
132
 
132
133
  attr_reader :datadog_configuration
133
134
 
134
- def datadog_tag_request
135
+ def datadog_tag_request(uri)
135
136
  span = @datadog_span
136
137
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
137
138
  method = Ext::NOT_APPLICABLE_METHOD
138
139
  method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
139
- span.resource = method
140
+ path = uri&.path
141
+ span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
142
+ method,
143
+ path,
144
+ enabled: Datadog.configuration.tracing.http_client_resource_name_quantize,
145
+ )
140
146
 
141
147
  if datadog_configuration[:peer_service]
142
148
  span.set_tag(
143
149
  Tracing::Metadata::Ext::TAG_PEER_SERVICE,
144
- datadog_configuration[:peer_service]
150
+ datadog_configuration[:peer_service],
145
151
  )
146
152
  end
147
153
 
@@ -153,10 +159,9 @@ module Datadog
153
159
 
154
160
  span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
155
161
 
156
- uri = try_parse_uri
157
162
  return unless uri
158
163
 
159
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, uri.path)
164
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
160
165
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, method)
161
166
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, uri.host)
162
167
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, uri.port)
@@ -165,8 +170,8 @@ module Datadog
165
170
  if @datadog_original_headers
166
171
  span.set_tags(
167
172
  Datadog.configuration.tracing.header_tags.request_tags(
168
- Core::Utils::Hash::CaseInsensitiveWrapper.new(@datadog_original_headers)
169
- )
173
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(@datadog_original_headers),
174
+ ),
170
175
  )
171
176
  end
172
177
 
@@ -60,7 +60,7 @@ module Datadog
60
60
 
61
61
  @datadog_multi_span = Tracing.trace(
62
62
  Ext::SPAN_MULTI_REQUEST,
63
- service: datadog_configuration[:service_name]
63
+ service: datadog_configuration[:service_name],
64
64
  )
65
65
  @datadog_multi_trace_digest = Tracing.active_trace.to_digest
66
66
 
@@ -68,7 +68,7 @@ module Datadog
68
68
  o.default do
69
69
  Contrib::SpanAttributeSchema.fetch_service_name(
70
70
  Ext::ENV_SERVICE_NAME,
71
- Ext::DEFAULT_PEER_SERVICE_NAME
71
+ Ext::DEFAULT_PEER_SERVICE_NAME,
72
72
  )
73
73
  end
74
74
  end
@@ -8,6 +8,7 @@ require_relative "../http"
8
8
  require_relative "../analytics"
9
9
  require_relative "ext"
10
10
  require_relative "../http_annotation_helper"
11
+ require_relative "../utils/quantization/http"
11
12
 
12
13
  module Datadog
13
14
  module Tracing
@@ -32,7 +33,7 @@ module Datadog
32
33
  annotate!(span, datum)
33
34
  if Tracing::Distributed::PropagationPolicy.enabled?(
34
35
  global_config: @options,
35
- trace: trace
36
+ trace: trace,
36
37
  )
37
38
  propagate!(trace, span, datum)
38
39
  end
@@ -117,7 +118,13 @@ module Datadog
117
118
  end
118
119
 
119
120
  def annotate!(span, datum)
120
- span.resource = datum[:method].to_s.upcase
121
+ http_method = datum[:method].to_s.upcase
122
+ path = datum[:path]
123
+ span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
124
+ http_method,
125
+ path,
126
+ enabled: Datadog.configuration.tracing.http_client_resource_name_quantize,
127
+ )
121
128
  span.service = service_name(datum[:host], @options)
122
129
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
123
130
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
@@ -125,7 +132,7 @@ module Datadog
125
132
  if @options[:peer_service]
126
133
  span.set_tag(
127
134
  Tracing::Metadata::Ext::TAG_PEER_SERVICE,
128
- @options[:peer_service]
135
+ @options[:peer_service],
129
136
  )
130
137
  end
131
138
 
@@ -139,14 +146,14 @@ module Datadog
139
146
  # Set analytics sample rate
140
147
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
141
148
 
142
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, datum[:path])
143
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, datum[:method].to_s.upcase)
149
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
150
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method)
144
151
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, datum[:host])
145
152
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, datum[:port])
146
153
  span.set_tags(
147
154
  Datadog.configuration.tracing.header_tags.request_tags(
148
- Core::Utils::Hash::CaseInsensitiveWrapper.new(datum[:headers])
149
- )
155
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(datum[:headers]),
156
+ ),
150
157
  )
151
158
 
152
159
  Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
@@ -166,8 +173,8 @@ module Datadog
166
173
 
167
174
  span.set_tags(
168
175
  Datadog.configuration.tracing.header_tags.response_tags(
169
- Core::Utils::Hash::CaseInsensitiveWrapper.new(response[:headers])
170
- )
176
+ Core::Utils::Hash::CaseInsensitiveWrapper.new(response[:headers]),
177
+ ),
171
178
  )
172
179
  end
173
180
  on_error.call(span, datum[:error]) if datum.key?(:error)
@@ -67,7 +67,7 @@ module Datadog
67
67
  o.default do
68
68
  Contrib::SpanAttributeSchema.fetch_service_name(
69
69
  Ext::ENV_SERVICE_NAME,
70
- Ext::DEFAULT_PEER_SERVICE_NAME
70
+ Ext::DEFAULT_PEER_SERVICE_NAME,
71
71
  )
72
72
  end
73
73
  end