datadog 2.39.0 → 2.47.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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +269 -44
  3. data/README.md +3 -0
  4. data/ext/datadog_profiling_native_extension/NativeExtensionDesign.md +12 -24
  5. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +256 -193
  6. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -5
  7. data/ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c +0 -2
  8. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +19 -20
  9. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h +5 -1
  10. data/ext/datadog_profiling_native_extension/collectors_stack.c +267 -171
  11. data/ext/datadog_profiling_native_extension/collectors_stack.h +17 -3
  12. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +307 -217
  13. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +10 -5
  14. data/ext/datadog_profiling_native_extension/crashtracking_runtime_stacks.c +5 -4
  15. data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +19 -11
  16. data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +7 -10
  17. data/ext/datadog_profiling_native_extension/extconf.rb +67 -99
  18. data/ext/datadog_profiling_native_extension/heap_recorder.c +353 -257
  19. data/ext/datadog_profiling_native_extension/heap_recorder.h +50 -31
  20. data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -27
  21. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +853 -496
  22. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +42 -15
  23. data/ext/datadog_profiling_native_extension/profiling.c +30 -23
  24. data/ext/datadog_profiling_native_extension/ruby_helpers.c +4 -80
  25. data/ext/datadog_profiling_native_extension/ruby_helpers.h +4 -7
  26. data/ext/datadog_profiling_native_extension/setup_signal_handler.c +0 -2
  27. data/ext/datadog_profiling_native_extension/stack_recorder.c +116 -89
  28. data/ext/datadog_profiling_native_extension/stack_recorder.h +12 -5
  29. data/ext/datadog_profiling_native_extension/time_helpers.c +2 -4
  30. data/ext/datadog_profiling_native_extension/time_helpers.h +15 -15
  31. data/ext/libdatadog_api/datadog_ruby_common.c +19 -11
  32. data/ext/libdatadog_api/datadog_ruby_common.h +7 -10
  33. data/ext/libdatadog_api/di.c +43 -3
  34. data/ext/libdatadog_api/extconf.rb +6 -1
  35. data/ext/libdatadog_api/feature_flags.c +8 -0
  36. data/ext/libdatadog_api/init.c +9 -1
  37. data/ext/libdatadog_api/otel_thread_context.c +274 -0
  38. data/ext/libdatadog_api/otel_thread_context.h +5 -0
  39. data/ext/libdatadog_api/process_discovery.c +15 -1
  40. data/ext/libdatadog_api/trace_exporter.c +2078 -0
  41. data/ext/libdatadog_api/trace_exporter.h +5 -0
  42. data/ext/libdatadog_extconf_helpers.rb +14 -9
  43. data/lib/datadog/ai_guard/component.rb +17 -8
  44. data/lib/datadog/ai_guard/configuration/ext.rb +2 -0
  45. data/lib/datadog/ai_guard/configuration.rb +13 -0
  46. data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +48 -55
  47. data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +1 -1
  48. data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +76 -0
  49. data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +1 -0
  50. data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +135 -0
  51. data/lib/datadog/ai_guard/evaluation/client.rb +50 -0
  52. data/lib/datadog/ai_guard/evaluation/content_part.rb +12 -0
  53. data/lib/datadog/ai_guard/evaluation/message.rb +25 -7
  54. data/lib/datadog/ai_guard/evaluation/message_builder.rb +31 -0
  55. data/lib/datadog/ai_guard/evaluation/no_op_result.rb +6 -6
  56. data/lib/datadog/ai_guard/evaluation/outcome.rb +24 -0
  57. data/lib/datadog/ai_guard/evaluation/request.rb +8 -64
  58. data/lib/datadog/ai_guard/evaluation/response.rb +33 -0
  59. data/lib/datadog/ai_guard/evaluation/result.rb +11 -18
  60. data/lib/datadog/ai_guard/evaluation/tool_call.rb +15 -2
  61. data/lib/datadog/ai_guard/evaluation.rb +36 -14
  62. data/lib/datadog/ai_guard/ext.rb +4 -1
  63. data/lib/datadog/ai_guard/{api_client.rb → http_client.rb} +7 -5
  64. data/lib/datadog/ai_guard/metrics/telemetry.rb +43 -0
  65. data/lib/datadog/ai_guard/redaction/replacements.rb +97 -0
  66. data/lib/datadog/ai_guard/redaction/result.rb +29 -0
  67. data/lib/datadog/ai_guard/redaction.rb +80 -0
  68. data/lib/datadog/ai_guard.rb +58 -57
  69. data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +21 -42
  70. data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +1 -1
  71. data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +1 -1
  72. data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +1 -1
  73. data/lib/datadog/appsec/assets/blocked.html +1 -108
  74. data/lib/datadog/appsec/configuration.rb +11 -2
  75. data/lib/datadog/appsec/context.rb +1 -1
  76. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +1 -1
  77. data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +2 -2
  78. data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
  79. data/lib/datadog/appsec/contrib/devise/patcher.rb +1 -1
  80. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +2 -2
  81. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +2 -2
  82. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
  83. data/lib/datadog/appsec/contrib/rack/ext.rb +2 -2
  84. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +2 -2
  85. data/lib/datadog/appsec/contrib/rack/patcher.rb +1 -1
  86. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +6 -3
  87. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +30 -3
  88. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +8 -7
  89. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +2 -1
  90. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +2 -2
  91. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +15 -3
  92. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +8 -7
  93. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +2 -1
  94. data/lib/datadog/appsec/processor/rule_loader.rb +12 -12
  95. data/lib/datadog/appsec/response.rb +1 -1
  96. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +3 -3
  97. data/lib/datadog/appsec/security_engine/engine.rb +5 -4
  98. data/lib/datadog/core/configuration/components.rb +50 -19
  99. data/lib/datadog/core/configuration/components_state.rb +8 -1
  100. data/lib/datadog/core/configuration/option_definition.rb +1 -1
  101. data/lib/datadog/core/configuration/options.rb +1 -1
  102. data/lib/datadog/core/configuration/settings.rb +38 -43
  103. data/lib/datadog/core/configuration/supported_configurations.rb +18 -2
  104. data/lib/datadog/core/crashtracking/component.rb +5 -1
  105. data/lib/datadog/core/diagnostics/environment_logger.rb +36 -1
  106. data/lib/datadog/core/environment/gc.rb +1 -1
  107. data/lib/datadog/core/environment/vm_cache.rb +1 -1
  108. data/lib/datadog/core/environment/yjit.rb +2 -2
  109. data/lib/datadog/core/metrics/helpers.rb +1 -1
  110. data/lib/datadog/core/metrics/options.rb +2 -2
  111. data/lib/datadog/core/process_discovery.rb +6 -2
  112. data/lib/datadog/core/remote/client/capabilities.rb +32 -21
  113. data/lib/datadog/core/remote/client.rb +45 -4
  114. data/lib/datadog/core/remote/component.rb +30 -7
  115. data/lib/datadog/core/remote/configuration/repository.rb +2 -2
  116. data/lib/datadog/core/remote/dispatcher.rb +47 -6
  117. data/lib/datadog/core/remote/worker.rb +8 -0
  118. data/lib/datadog/core/telemetry/configuration_value.rb +38 -0
  119. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +3 -1
  120. data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +1 -1
  121. data/lib/datadog/core/telemetry/event/app_started.rb +5 -24
  122. data/lib/datadog/core/telemetry/event/generate_metrics.rb +1 -1
  123. data/lib/datadog/core/telemetry/event/log.rb +2 -2
  124. data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
  125. data/lib/datadog/core/telemetry/metric.rb +2 -2
  126. data/lib/datadog/core/telemetry/request.rb +2 -2
  127. data/lib/datadog/core/transport/http.rb +1 -1
  128. data/lib/datadog/core/transport/transport.rb +1 -1
  129. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +170 -18
  130. data/lib/datadog/core/utils/sequence.rb +3 -6
  131. data/lib/datadog/core/utils/time.rb +16 -54
  132. data/lib/datadog/core/workers/runtime_metrics.rb +1 -1
  133. data/lib/datadog/data_streams/pathway_context.rb +20 -22
  134. data/lib/datadog/data_streams/processor.rb +45 -14
  135. data/lib/datadog/di/boot.rb +1 -0
  136. data/lib/datadog/di/capture_expression_evaluator/result.rb +30 -0
  137. data/lib/datadog/di/capture_expression_evaluator.rb +39 -9
  138. data/lib/datadog/di/component.rb +108 -3
  139. data/lib/datadog/di/configuration.rb +53 -2
  140. data/lib/datadog/di/context.rb +7 -2
  141. data/lib/datadog/di/contrib/active_record.rb +8 -2
  142. data/lib/datadog/di/el/compiler.rb +88 -12
  143. data/lib/datadog/di/el/evaluator.rb +82 -2
  144. data/lib/datadog/di/el/expression.rb +13 -2
  145. data/lib/datadog/di/evaluation_failure.rb +28 -0
  146. data/lib/datadog/di/guardrails_telemetry/reason.rb +87 -0
  147. data/lib/datadog/di/guardrails_telemetry.rb +203 -0
  148. data/lib/datadog/di/instrumenter.rb +106 -15
  149. data/lib/datadog/di/logger.rb +32 -10
  150. data/lib/datadog/di/probe.rb +9 -1
  151. data/lib/datadog/di/probe_builder.rb +7 -6
  152. data/lib/datadog/di/probe_manager.rb +56 -8
  153. data/lib/datadog/di/probe_notification_builder.rb +31 -28
  154. data/lib/datadog/di/probe_notifier_worker.rb +56 -6
  155. data/lib/datadog/di/proc_responder.rb +1 -1
  156. data/lib/datadog/di/remote.rb +49 -5
  157. data/lib/datadog/di/serializer.rb +172 -55
  158. data/lib/datadog/di/snapshot_event.rb +38 -0
  159. data/lib/datadog/di/transport/http.rb +13 -3
  160. data/lib/datadog/di/transport/input.rb +32 -7
  161. data/lib/datadog/error_tracking/component.rb +1 -1
  162. data/lib/datadog/kit/appsec/events/v2.rb +2 -2
  163. data/lib/datadog/open_feature/activation.rb +268 -0
  164. data/lib/datadog/open_feature/agentless/configuration_source.rb +246 -0
  165. data/lib/datadog/open_feature/agentless/parser.rb +43 -0
  166. data/lib/datadog/open_feature/agentless/response.rb +19 -0
  167. data/lib/datadog/open_feature/agentless/transport.rb +103 -0
  168. data/lib/datadog/open_feature/component.rb +85 -13
  169. data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +90 -0
  170. data/lib/datadog/open_feature/configuration/source/resolution.rb +22 -0
  171. data/lib/datadog/open_feature/configuration/source.rb +43 -0
  172. data/lib/datadog/open_feature/configuration.rb +124 -0
  173. data/lib/datadog/open_feature/evaluation_engine.rb +29 -3
  174. data/lib/datadog/open_feature/exposures/batch_builder.rb +1 -1
  175. data/lib/datadog/open_feature/exposures/event.rb +15 -8
  176. data/lib/datadog/open_feature/ext.rb +19 -0
  177. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +236 -80
  178. data/lib/datadog/open_feature/flag_evaluation/writer.rb +179 -68
  179. data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
  180. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +24 -21
  181. data/lib/datadog/open_feature/native_evaluator.rb +20 -6
  182. data/lib/datadog/open_feature/noop_evaluator.rb +5 -0
  183. data/lib/datadog/open_feature/provider.rb +315 -10
  184. data/lib/datadog/open_feature/remote.rb +5 -5
  185. data/lib/datadog/open_feature/transport.rb +5 -0
  186. data/lib/datadog/open_feature.rb +31 -1
  187. data/lib/datadog/opentelemetry/sdk/propagator.rb +1 -1
  188. data/lib/datadog/opentelemetry/signal_configuration.rb +13 -9
  189. data/lib/datadog/opentelemetry/trace.rb +3 -0
  190. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +10 -2
  191. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -7
  192. data/lib/datadog/profiling/collectors/info.rb +40 -13
  193. data/lib/datadog/profiling/collectors/thread_context.rb +6 -17
  194. data/lib/datadog/profiling/component.rb +33 -39
  195. data/lib/datadog/profiling/exporter.rb +10 -10
  196. data/lib/datadog/profiling/tasks/exec.rb +1 -1
  197. data/lib/datadog/profiling.rb +4 -0
  198. data/lib/datadog/symbol_database/extractor.rb +89 -107
  199. data/lib/datadog/tracing/component.rb +44 -2
  200. data/lib/datadog/tracing/configuration/dynamic/option.rb +4 -0
  201. data/lib/datadog/tracing/configuration/dynamic.rb +5 -3
  202. data/lib/datadog/tracing/configuration/ext.rb +4 -0
  203. data/lib/datadog/tracing/configuration/settings.rb +36 -0
  204. data/lib/datadog/tracing/context.rb +24 -2
  205. data/lib/datadog/tracing/context_provider.rb +17 -5
  206. data/lib/datadog/tracing/contrib/action_cable/events.rb +1 -1
  207. data/lib/datadog/tracing/contrib/action_mailer/events.rb +1 -1
  208. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +2 -2
  209. data/lib/datadog/tracing/contrib/action_view/events.rb +1 -1
  210. data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +1 -1
  211. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  212. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +1 -0
  213. data/lib/datadog/tracing/contrib/active_record/events.rb +1 -1
  214. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +2 -2
  215. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  216. data/lib/datadog/tracing/contrib/aws/services.rb +1 -1
  217. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
  218. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +10 -5
  219. data/lib/datadog/tracing/contrib/excon/middleware.rb +10 -3
  220. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  221. data/lib/datadog/tracing/contrib/faraday/middleware.rb +10 -4
  222. data/lib/datadog/tracing/contrib/grape/endpoint.rb +32 -5
  223. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -1
  224. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
  225. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +1 -1
  226. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +2 -1
  227. data/lib/datadog/tracing/contrib/http/instrumentation.rb +16 -1
  228. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +8 -2
  229. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +10 -4
  230. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +4 -0
  231. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +7 -2
  232. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +7 -2
  233. data/lib/datadog/tracing/contrib/kafka/events.rb +1 -1
  234. data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +1 -1
  235. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  236. data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -1
  237. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +1 -1
  238. data/lib/datadog/tracing/contrib/patchable.rb +1 -1
  239. data/lib/datadog/tracing/contrib/patcher.rb +1 -1
  240. data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
  241. data/lib/datadog/tracing/contrib/racecar/events.rb +1 -1
  242. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -1
  243. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +1 -1
  244. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  245. data/lib/datadog/tracing/contrib/rack/trace_proxy_middleware.rb +1 -1
  246. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
  247. data/lib/datadog/tracing/contrib/redis/quantize.rb +36 -2
  248. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +9 -3
  249. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +10 -3
  250. data/lib/datadog/tracing/contrib/sequel/database.rb +1 -5
  251. data/lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb +140 -0
  252. data/lib/datadog/tracing/contrib/sequel/utils.rb +50 -63
  253. data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +1 -1
  254. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -1
  255. data/lib/datadog/tracing/contrib/sneakers/tracer.rb +1 -1
  256. data/lib/datadog/tracing/contrib/utils/quantization/hash_formatter.rb +1 -1
  257. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +108 -3
  258. data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +1 -1
  259. data/lib/datadog/tracing/correlation.rb +2 -2
  260. data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -2
  261. data/lib/datadog/tracing/distributed/baggage.rb +1 -3
  262. data/lib/datadog/tracing/distributed/datadog.rb +3 -3
  263. data/lib/datadog/tracing/distributed/propagation.rb +3 -0
  264. data/lib/datadog/tracing/distributed/propagation_policy.rb +5 -0
  265. data/lib/datadog/tracing/distributed/trace_context.rb +14 -271
  266. data/lib/datadog/tracing/distributed/trace_state/datadog.rb +233 -0
  267. data/lib/datadog/tracing/distributed/trace_state/ext.rb +44 -0
  268. data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +156 -0
  269. data/lib/datadog/tracing/distributed/trace_state.rb +121 -0
  270. data/lib/datadog/tracing/metadata/ext.rb +3 -0
  271. data/lib/datadog/tracing/metadata/tagging.rb +1 -1
  272. data/lib/datadog/tracing/otel_thread_context.rb +97 -0
  273. data/lib/datadog/tracing/remote.rb +236 -37
  274. data/lib/datadog/tracing/sampling/rule_sampler.rb +2 -0
  275. data/lib/datadog/tracing/span.rb +1 -1
  276. data/lib/datadog/tracing/span_operation.rb +1 -1
  277. data/lib/datadog/tracing/sync_writer.rb +8 -3
  278. data/lib/datadog/tracing/trace_digest.rb +22 -4
  279. data/lib/datadog/tracing/trace_operation.rb +22 -10
  280. data/lib/datadog/tracing/tracer.rb +28 -7
  281. data/lib/datadog/tracing/transport/http/telemetry.rb +94 -0
  282. data/lib/datadog/tracing/transport/http/traces.rb +2 -0
  283. data/lib/datadog/tracing/transport/io/traces.rb +1 -1
  284. data/lib/datadog/tracing/transport/native/response.rb +71 -0
  285. data/lib/datadog/tracing/transport/native/telemetry.rb +17 -0
  286. data/lib/datadog/tracing/transport/native.rb +395 -0
  287. data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
  288. data/lib/datadog/tracing/transport/telemetry.rb +62 -0
  289. data/lib/datadog/tracing/transport/trace_formatter.rb +14 -4
  290. data/lib/datadog/tracing/transport/traces.rb +85 -38
  291. data/lib/datadog/tracing/writer.rb +17 -4
  292. data/lib/datadog/version.rb +1 -1
  293. metadata +51 -13
  294. data/lib/datadog/ai_guard/evaluation/content_builder.rb +0 -31
  295. data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
  296. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +0 -69
@@ -14,7 +14,7 @@ module Datadog
14
14
  ALL = [
15
15
  Events::Broadcast,
16
16
  Events::PerformAction,
17
- Events::Transmit
17
+ Events::Transmit,
18
18
  ].freeze
19
19
 
20
20
  module_function
@@ -11,7 +11,7 @@ module Datadog
11
11
  module Events
12
12
  ALL = [
13
13
  Events::Process,
14
- Events::Deliver
14
+ Events::Deliver,
15
15
  ].freeze
16
16
 
17
17
  module_function
@@ -108,9 +108,9 @@ module Datadog
108
108
  headers: {
109
109
  # The exception this controller was given in the request,
110
110
  # which is typical if the controller is configured to handle exceptions.
111
- request_exception: request.headers["action_dispatch.exception"]
111
+ request_exception: request.headers["action_dispatch.exception"],
112
112
  },
113
- tracing_context: {}
113
+ tracing_context: {},
114
114
  }
115
115
 
116
116
  begin
@@ -11,7 +11,7 @@ module Datadog
11
11
  module Events
12
12
  ALL = [
13
13
  Events::RenderPartial,
14
- Events::RenderTemplate
14
+ Events::RenderTemplate,
15
15
  ].freeze
16
16
 
17
17
  module_function
@@ -11,7 +11,7 @@ module Datadog
11
11
  module Events
12
12
  ALL = [
13
13
  Events::Render,
14
- Events::Serialize
14
+ Events::Serialize,
15
15
  ].freeze
16
16
 
17
17
  module_function
@@ -138,7 +138,7 @@ module Datadog
138
138
  host: active_record_config[:host],
139
139
  port: active_record_config[:port],
140
140
  database: active_record_config[:database],
141
- username: active_record_config[:username]
141
+ username: active_record_config[:username],
142
142
  }
143
143
  end
144
144
 
@@ -46,6 +46,7 @@ module Datadog
46
46
  span.resource = payload.fetch(:sql)
47
47
  span.type = Tracing::Metadata::Ext::SQL::TYPE
48
48
 
49
+ span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
49
50
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
50
51
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_SQL)
51
52
 
@@ -11,7 +11,7 @@ module Datadog
11
11
  module Events
12
12
  ALL = [
13
13
  Events::Instantiation,
14
- Events::SQL
14
+ Events::SQL,
15
15
  ].freeze
16
16
 
17
17
  module_function
@@ -32,7 +32,7 @@ module Datadog
32
32
 
33
33
  def span_options
34
34
  {
35
- type: Ext::SPAN_TYPE_CACHE
35
+ type: Ext::SPAN_TYPE_CACHE,
36
36
  }
37
37
  end
38
38
 
@@ -42,7 +42,7 @@ module Datadog
42
42
  "cache_read.active_support" => {resource: Ext::RESOURCE_CACHE_GET},
43
43
  "cache_read_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MGET, multi_key: true},
44
44
  "cache_write.active_support" => {resource: Ext::RESOURCE_CACHE_SET},
45
- "cache_write_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MSET, multi_key: true}
45
+ "cache_write_multi.active_support" => {resource: Ext::RESOURCE_CACHE_MSET, multi_key: true},
46
46
  }.freeze
47
47
 
48
48
  def trace?(event, payload)
@@ -42,7 +42,7 @@ module Datadog
42
42
  TAG_STATE_MACHINE_NAME,
43
43
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
44
44
  Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
45
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
45
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
46
46
  end
47
47
  end
48
48
  end
@@ -131,7 +131,7 @@ module Datadog
131
131
  "kinesis" => Service::Kinesis.new,
132
132
  "eventbridge" => Service::EventBridge.new,
133
133
  "states" => Service::States.new,
134
- "s3" => Service::S3.new
134
+ "s3" => Service::S3.new,
135
135
  }.freeze
136
136
  end
137
137
  end
@@ -15,7 +15,7 @@ module Datadog
15
15
  DEFAULT_OPTIONS = {
16
16
  exclude: EXCLUDE_KEYS,
17
17
  show: SHOW_KEYS,
18
- placeholder: PLACEHOLDER
18
+ placeholder: PLACEHOLDER,
19
19
  }.freeze
20
20
 
21
21
  module_function
@@ -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
@@ -111,7 +112,7 @@ module Datadog
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,
@@ -131,12 +132,17 @@ 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(
@@ -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)
@@ -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
@@ -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
@@ -139,8 +146,8 @@ 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(
@@ -31,7 +31,7 @@ module Datadog
31
31
  PEER_SERVICE_SOURCES = [TAG_INSTANCE,
32
32
  Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
33
33
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
34
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
34
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
35
35
  end
36
36
 
37
37
  module RPC
@@ -41,7 +41,7 @@ module Datadog
41
41
  PEER_SERVICE_SOURCES = [TAG_SERVICE,
42
42
  Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
43
43
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
44
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
44
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
45
45
  module GRPC
46
46
  TAG_STATUS_CODE = "rpc.grpc.status_code"
47
47
  TAG_FULL_METHOD = "rpc.grpc.full_method"
@@ -53,7 +53,7 @@ module Datadog
53
53
  TAG_DESTINATION = "messaging.destination"
54
54
  PEER_SERVICE_SOURCES = [Tracing::Metadata::Ext::NET::TAG_DESTINATION_NAME,
55
55
  Tracing::Metadata::Ext::TAG_PEER_HOSTNAME,
56
- Tracing::Metadata::Ext::NET::TAG_TARGET_HOST,].freeze
56
+ Tracing::Metadata::Ext::NET::TAG_TARGET_HOST].freeze
57
57
  end
58
58
 
59
59
  module Metadata
@@ -7,6 +7,7 @@ require_relative "../http"
7
7
  require_relative "../analytics"
8
8
  require_relative "ext"
9
9
  require_relative "../http_annotation_helper"
10
+ require_relative "../utils/quantization/http"
10
11
  require_relative "../../../core/telemetry/logger"
11
12
 
12
13
  module Datadog
@@ -45,7 +46,8 @@ module Datadog
45
46
 
46
47
  # rubocop:disable Metrics/AbcSize
47
48
  def annotate!(span, env, options)
48
- span.resource = resource_name(env)
49
+ path = env[:url].path
50
+ span.resource = resource_name(env, path)
49
51
  span.service = service_name(env[:url].host, options)
50
52
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
51
53
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
@@ -69,7 +71,7 @@ module Datadog
69
71
  Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate])
70
72
  end
71
73
 
72
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, env[:url].path)
74
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
73
75
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, env[:method].to_s.upcase)
74
76
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, env[:url].host)
75
77
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, env[:url].port)
@@ -103,8 +105,12 @@ module Datadog
103
105
  Contrib::HTTP.inject(trace, env[:request_headers])
104
106
  end
105
107
 
106
- def resource_name(env)
107
- env[:method].to_s.upcase
108
+ def resource_name(env, path)
109
+ Contrib::Utils::Quantization::HTTP.client_resource(
110
+ env[:method].to_s.upcase,
111
+ path,
112
+ enabled: Datadog.configuration.tracing.http_client_resource_name_quantize
113
+ )
108
114
  end
109
115
 
110
116
  def build_request_options!(env)
@@ -15,6 +15,7 @@ module Datadog
15
15
  module Endpoint
16
16
  KEY_RUN = "datadog_grape_endpoint_run"
17
17
  KEY_RENDER = "datadog_grape_endpoint_render"
18
+ FORMAT_SEGMENT = /\(\.:?\w+\)\z/
18
19
 
19
20
  class << self
20
21
  def subscribe
@@ -43,8 +44,8 @@ module Datadog
43
44
  # collect endpoint details
44
45
  endpoint = payload.fetch(:endpoint)
45
46
  env = payload.fetch(:env)
46
- api_view = api_view(endpoint.options[:for])
47
- request_method = endpoint.options.fetch(:method).first
47
+ api_view = api_view(endpoint_api(endpoint))
48
+ request_method = endpoint_request_method(endpoint)
48
49
  path = endpoint_expand_path(endpoint)
49
50
  resource = "#{api_view} #{request_method} #{path}"
50
51
 
@@ -65,12 +66,16 @@ module Datadog
65
66
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
66
67
 
67
68
  if (grape_route = env["grape.routing_args"]) && grape_route[:route_info]
69
+ route_info = grape_route[:route_info]
70
+ # Grape 2.3 through 3.0 return nil from GreedyRoute#path; the
71
+ # path lives at pattern.path in those versions.
72
+ route_path = route_info.path || route_info.pattern&.path
68
73
  trace.set_tag(
69
74
  Tracing::Metadata::Ext::HTTP::TAG_ROUTE,
70
75
  # here we are removing the format from the path:
71
76
  # e.g. /path/to/resource(.json) => /path/to/resource
72
77
  # e.g. /path/to/resource(.:format) => /path/to/resource
73
- grape_route[:route_info].path&.gsub(/\(\.:?\w+\)\z/, "")
78
+ route_path&.gsub(FORMAT_SEGMENT, "")
74
79
  )
75
80
 
76
81
  trace.set_tag(Tracing::Metadata::Ext::HTTP::TAG_ROUTE_PATH, env["SCRIPT_NAME"])
@@ -96,8 +101,8 @@ module Datadog
96
101
  begin
97
102
  # collect endpoint details
98
103
  endpoint = payload.fetch(:endpoint)
99
- api_view = api_view(endpoint.options[:for])
100
- request_method = endpoint.options.fetch(:method).first
104
+ api_view = api_view(endpoint_api(endpoint))
105
+ request_method = endpoint_request_method(endpoint)
101
106
  path = endpoint_expand_path(endpoint)
102
107
 
103
108
  trace.resource = span.resource
@@ -266,8 +271,25 @@ module Datadog
266
271
  end
267
272
  end
268
273
 
274
+ # Grape 4 moved three values off the endpoint's public options Hash: the
275
+ # API class became the #api reader (ruby-grape/grape#2778), and the verb
276
+ # and path are read off the route (#2775, #2776). Each reader prefers the
277
+ # options Hash, so Grape 1.x through 3.x resolve as they did before.
278
+ def endpoint_api(endpoint)
279
+ endpoint.options.fetch(:for) { endpoint.api }
280
+ end
281
+
282
+ def endpoint_request_method(endpoint)
283
+ request_methods = endpoint.options[:method]
284
+ return request_methods.first if request_methods
285
+
286
+ endpoint.routes.first&.request_method
287
+ end
288
+
269
289
  def endpoint_expand_path(endpoint)
270
290
  route_path = endpoint.options[:path]
291
+ return endpoint_route_path(endpoint) if route_path.nil? || route_path.empty?
292
+
271
293
  namespace = endpoint.routes.first&.namespace || ""
272
294
 
273
295
  path = (namespace.split("/") + route_path)
@@ -277,6 +299,11 @@ module Datadog
277
299
  path
278
300
  end
279
301
 
302
+ # A compiled path already carries the namespace, so it is used whole.
303
+ def endpoint_route_path(endpoint)
304
+ endpoint.routes.first&.path&.sub(FORMAT_SEGMENT, "") || "/"
305
+ end
306
+
280
307
  def service_name
281
308
  datadog_configuration[:service_name]
282
309
  end
@@ -25,7 +25,7 @@ module Datadog
25
25
  type: Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND,
26
26
  service: service_name, # Maintain client-side service name configuration
27
27
  resource: formatter.resource_name,
28
- on_error: on_error
28
+ on_error: on_error,
29
29
  }
30
30
 
31
31
  Tracing.trace(Ext::SPAN_CLIENT, **options) do |span, trace|
@@ -26,7 +26,7 @@ module Datadog
26
26
  type: Tracing::Metadata::Ext::HTTP::TYPE_INBOUND,
27
27
  service: service_name, # TODO: Remove server-side service name configuration
28
28
  resource: formatter.resource_name,
29
- on_error: on_error
29
+ on_error: on_error,
30
30
  }
31
31
  metadata = keywords[:call].metadata
32
32
 
@@ -35,7 +35,7 @@ module Datadog
35
35
  Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
36
36
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
37
37
  Tracing::Distributed::Baggage.new(fetcher: Fetcher),
38
- Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
38
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
39
39
  },
40
40
  propagation_style_inject: propagation_style_inject,
41
41
  propagation_style_extract: propagation_style_extract,
@@ -10,7 +10,8 @@ module Datadog
10
10
  # Hanami Instrumentation for `hanami.routing`
11
11
  module RouterTracing
12
12
  def call(env)
13
- return super if Tracing.active_span && Tracing.active_span.name == Ext::SPAN_ROUTING
13
+ active_span = Tracing.active_span
14
+ return super if active_span && active_span.name == Ext::SPAN_ROUTING
14
15
 
15
16
  Tracing.trace(
16
17
  Ext::SPAN_ROUTING,
@@ -34,7 +34,12 @@ module Datadog
34
34
  span.service = service_name(host, request_options, client_config)
35
35
  span.set_tag(Tracing::Metadata::Ext::TAG_SVC_SRC, Ext::TAG_COMPONENT)
36
36
  span.type = Tracing::Metadata::Ext::HTTP::TYPE_OUTBOUND
37
- span.resource = req.method
37
+ quantize_resource = Datadog.configuration.tracing.http_client_resource_name_quantize
38
+ span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
39
+ req.method,
40
+ quantize_resource ? request_uri_path(req) : nil,
41
+ enabled: quantize_resource
42
+ )
38
43
 
39
44
  if Tracing::Distributed::PropagationPolicy.enabled?(
40
45
  pin_config: client_config,
@@ -116,6 +121,16 @@ module Datadog
116
121
 
117
122
  private
118
123
 
124
+ def request_uri_path(request)
125
+ uri = request.uri if request.respond_to?(:uri)
126
+ return uri.path if uri
127
+ return request.path.split(/[?#]/, 2).first if request.path.start_with?("/")
128
+
129
+ URI.parse(request.path).path
130
+ rescue URI::InvalidURIError
131
+ nil
132
+ end
133
+
119
134
  def host_and_port(request)
120
135
  if request.respond_to?(:uri) && request.uri
121
136
  [request.uri.host, request.uri.port]
@@ -4,6 +4,7 @@ require_relative "../../metadata/ext"
4
4
  require_relative "../http"
5
5
  require_relative "../analytics"
6
6
  require_relative "../http_annotation_helper"
7
+ require_relative "../utils/quantization/http"
7
8
  require_relative "../../../core/telemetry/logger"
8
9
 
9
10
  module Datadog
@@ -74,10 +75,15 @@ module Datadog
74
75
 
75
76
  http_method = req.header.request_method.upcase
76
77
  uri = req.header.request_uri
78
+ path = uri.path
77
79
 
78
- span.resource = http_method
80
+ span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
81
+ http_method,
82
+ path,
83
+ enabled: Datadog.configuration.tracing.http_client_resource_name_quantize
84
+ )
79
85
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method)
80
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, uri.path)
86
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
81
87
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, uri.host)
82
88
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, uri.port)
83
89
 
@@ -4,6 +4,7 @@ require_relative "../../metadata/ext"
4
4
  require_relative "../http"
5
5
  require_relative "../analytics"
6
6
  require_relative "../http_annotation_helper"
7
+ require_relative "../utils/quantization/http"
7
8
  require_relative "../../../core/telemetry/logger"
8
9
 
9
10
  module Datadog
@@ -70,17 +71,22 @@ module Datadog
70
71
  span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
71
72
  span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
72
73
 
74
+ uri = req.uri
75
+ path = uri&.path
73
76
  if req.verb&.is_a?(String) || req.verb.is_a?(Symbol)
74
77
  http_method = req.verb.to_s.upcase
75
- span.resource = http_method
78
+ span.resource = Contrib::Utils::Quantization::HTTP.client_resource(
79
+ http_method,
80
+ path,
81
+ enabled: Datadog.configuration.tracing.http_client_resource_name_quantize
82
+ )
76
83
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_METHOD, http_method)
77
84
  else
78
85
  logger.debug("service #{req_options[:service_name]} span #{Ext::SPAN_REQUEST} missing request verb")
79
86
  end
80
87
 
81
- if req.uri
82
- uri = req.uri
83
- span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, uri.path)
88
+ if uri
89
+ span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_URL, path)
84
90
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, uri.host)
85
91
  span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, uri.port)
86
92
 
@@ -21,6 +21,10 @@ module Datadog
21
21
  super
22
22
 
23
23
  span.resource = payload[:api]
24
+ end
25
+
26
+ def on_finish(span, _event, _id, payload)
27
+ super
24
28
 
25
29
  span.set_tag(Ext::TAG_REQUEST_SIZE, payload[:request_size]) if payload.key?(:request_size)
26
30
  span.set_tag(Ext::TAG_RESPONSE_SIZE, payload[:response_size]) if payload.key?(:response_size)
@@ -17,12 +17,17 @@ module Datadog
17
17
 
18
18
  module_function
19
19
 
20
- def on_start(span, _event, _id, payload)
20
+ def on_start(span, _event, _id, _payload)
21
+ super
22
+
23
+ span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
24
+ end
25
+
26
+ def on_finish(span, _event, _id, payload)
21
27
  super
22
28
 
23
29
  span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
24
30
  span.set_tag(Ext::TAG_SENT_MESSAGE_COUNT, payload[:sent_message_count]) if payload.key?(:sent_message_count)
25
- span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
26
31
  end
27
32
 
28
33
  def span_name
@@ -17,7 +17,13 @@ module Datadog
17
17
 
18
18
  module_function
19
19
 
20
- def on_start(span, _event, _id, payload)
20
+ def on_start(span, _event, _id, _payload)
21
+ super
22
+
23
+ span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
24
+ end
25
+
26
+ def on_finish(span, _event, _id, payload)
21
27
  super
22
28
 
23
29
  span.set_tag(Ext::TAG_ATTEMPTS, payload[:attempts]) if payload.key?(:attempts)
@@ -25,7 +31,6 @@ module Datadog
25
31
  if payload.key?(:delivered_message_count)
26
32
  span.set_tag(Ext::TAG_DELIVERED_MESSAGE_COUNT, payload[:delivered_message_count])
27
33
  end
28
- span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_PRODUCER)
29
34
  end
30
35
 
31
36
  def span_name
@@ -25,7 +25,7 @@ module Datadog
25
25
  Events::ConsumerGroup::LeaveGroup,
26
26
  Events::ConsumerGroup::SyncGroup,
27
27
  Events::ProduceOperation::SendMessages,
28
- Events::Producer::DeliverMessages
28
+ Events::Producer::DeliverMessages,
29
29
  ].freeze
30
30
 
31
31
  module_function
@@ -34,7 +34,7 @@ module Datadog
34
34
  Tracing::Distributed::TraceContext.new(fetcher: Tracing::Distributed::Fetcher),
35
35
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_BAGGAGE =>
36
36
  Tracing::Distributed::Baggage.new(fetcher: Tracing::Distributed::Fetcher),
37
- Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
37
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new,
38
38
  },
39
39
  propagation_style_inject: propagation_style_inject,
40
40
  propagation_style_extract: propagation_style_extract,
@@ -28,7 +28,7 @@ module Datadog
28
28
  {
29
29
  "operation" => command_name,
30
30
  "database" => database_name,
31
- "collection" => command.values.first
31
+ "collection" => command.values.first,
32
32
  },
33
33
  options
34
34
  )
@@ -18,7 +18,7 @@ module Datadog
18
18
  RELATIVE_RESOURCE_PATTERN = "relative"
19
19
  VALID_RESOURCE_PATTERNS = [
20
20
  ABSOLUTE_RESOURCE_PATTERN,
21
- RELATIVE_RESOURCE_PATTERN
21
+ RELATIVE_RESOURCE_PATTERN,
22
22
  ].freeze
23
23
  # Default should be changed to RELATIVE in 3.0 to match the Elasticsearch integration
24
24
  DEFAULT_RESOURCE_PATTERN = ABSOLUTE_RESOURCE_PATTERN
@@ -15,7 +15,7 @@ module Datadog
15
15
  DEFAULT_OPTIONS = {
16
16
  exclude: EXCLUDE_KEYS,
17
17
  show: SHOW_KEYS,
18
- placeholder: PLACEHOLDER
18
+ placeholder: PLACEHOLDER,
19
19
  }.freeze
20
20
 
21
21
  module_function
@@ -84,7 +84,7 @@ module Datadog
84
84
  available: self.class.available?,
85
85
  loaded: self.class.loaded?,
86
86
  compatible: self.class.compatible?,
87
- patchable: self.class.patchable?
87
+ patchable: self.class.patchable?,
88
88
  }
89
89
  end
90
90
 
@@ -57,7 +57,7 @@ module Datadog
57
57
  @patch_error_result = {
58
58
  type: e.class.name,
59
59
  message: e.message,
60
- line: Array(e.backtrace).first
60
+ line: Array(e.backtrace).first,
61
61
  }
62
62
 
63
63
  # Emit a metric
@@ -12,7 +12,7 @@ module Datadog
12
12
  trace_options = {
13
13
  service: configuration[:service_name],
14
14
  type: Tracing::Metadata::Ext::AppTypes::TYPE_WORKER,
15
- on_error: configuration[:on_error]
15
+ on_error: configuration[:on_error],
16
16
  }
17
17
 
18
18
  Tracing.trace(Ext::SPAN_JOB, **trace_options) do |request_span|