datadog 2.19.0 → 2.20.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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -1
  3. data/ext/libdatadog_api/extconf.rb +3 -1
  4. data/ext/libdatadog_extconf_helpers.rb +13 -3
  5. data/lib/datadog/appsec/component.rb +3 -13
  6. data/lib/datadog/appsec/context.rb +23 -0
  7. data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
  8. data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
  9. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
  10. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
  11. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
  12. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
  13. data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
  14. data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
  15. data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
  16. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
  17. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
  18. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
  19. data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
  20. data/lib/datadog/appsec/event.rb +3 -18
  21. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +16 -0
  22. data/lib/datadog/appsec/metrics/collector.rb +7 -3
  23. data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
  24. data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
  25. data/lib/datadog/appsec/metrics.rb +1 -0
  26. data/lib/datadog/appsec/security_engine/engine.rb +14 -32
  27. data/lib/datadog/appsec/security_engine/result.rb +16 -0
  28. data/lib/datadog/appsec/security_engine/runner.rb +18 -4
  29. data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
  30. data/lib/datadog/appsec/trace_keeper.rb +24 -0
  31. data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
  32. data/lib/datadog/appsec.rb +0 -7
  33. data/lib/datadog/auto_instrument_base.rb +2 -1
  34. data/lib/datadog/core/configuration/option.rb +29 -20
  35. data/lib/datadog/core/configuration/option_definition.rb +2 -2
  36. data/lib/datadog/core/configuration/options.rb +13 -7
  37. data/lib/datadog/di/boot.rb +7 -0
  38. data/lib/datadog/di/component.rb +7 -0
  39. data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
  40. data/lib/datadog/di/probe_file_loader.rb +82 -0
  41. data/lib/datadog/di/remote.rb +3 -5
  42. data/lib/datadog/di.rb +0 -1
  43. data/lib/datadog/kit/appsec/events/v2.rb +5 -4
  44. data/lib/datadog/kit/appsec/events.rb +11 -10
  45. data/lib/datadog/kit/identity.rb +17 -11
  46. data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
  47. data/lib/datadog/opentelemetry/api/context.rb +10 -9
  48. data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
  49. data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
  50. data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
  51. data/lib/datadog/opentelemetry/trace.rb +4 -4
  52. data/lib/datadog/profiling.rb +6 -8
  53. data/lib/datadog/tracing/analytics.rb +1 -1
  54. data/lib/datadog/tracing/buffer.rb +7 -7
  55. data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
  56. data/lib/datadog/tracing/configuration/ext.rb +3 -2
  57. data/lib/datadog/tracing/configuration/settings.rb +17 -0
  58. data/lib/datadog/tracing/context.rb +2 -2
  59. data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
  60. data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
  61. data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
  62. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
  63. data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
  64. data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
  65. data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
  66. data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
  67. data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
  68. data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
  69. data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
  70. data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
  71. data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
  72. data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
  73. data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
  74. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
  75. data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
  76. data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
  77. data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
  78. data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
  79. data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
  80. data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
  81. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +6 -6
  82. data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
  83. data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
  84. data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
  85. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
  86. data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
  87. data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
  88. data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
  89. data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
  90. data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
  91. data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
  92. data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
  93. data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
  94. data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
  95. data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
  96. data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
  97. data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
  98. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
  99. data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
  100. data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
  101. data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
  102. data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
  103. data/lib/datadog/tracing/contrib/configurable.rb +6 -6
  104. data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
  105. data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
  106. data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
  107. data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
  108. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
  109. data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
  110. data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
  111. data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
  112. data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
  113. data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
  114. data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
  115. data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
  116. data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
  117. data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
  118. data/lib/datadog/tracing/contrib/ext.rb +3 -3
  119. data/lib/datadog/tracing/contrib/extensions.rb +9 -9
  120. data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
  121. data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
  122. data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
  123. data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
  124. data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
  125. data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
  126. data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
  127. data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
  128. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
  129. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
  130. data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
  131. data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
  132. data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
  133. data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
  134. data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
  135. data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
  136. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
  137. data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
  138. data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
  139. data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
  140. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
  141. data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
  142. data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
  143. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
  144. data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
  145. data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
  146. data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
  147. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
  148. data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
  149. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
  150. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
  151. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
  152. data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
  153. data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
  154. data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
  155. data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
  156. data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
  157. data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
  158. data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
  159. data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
  160. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
  161. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
  162. data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
  163. data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
  164. data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
  165. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
  166. data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
  167. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
  168. data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
  169. data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
  170. data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
  171. data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
  172. data/lib/datadog/tracing/contrib/patcher.rb +7 -9
  173. data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
  174. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
  175. data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
  176. data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
  177. data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
  178. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
  179. data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
  180. data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
  181. data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
  182. data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
  183. data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
  184. data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
  185. data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
  186. data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
  187. data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
  188. data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
  189. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  190. data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
  191. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
  192. data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
  193. data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
  194. data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
  195. data/lib/datadog/tracing/contrib/rails/runner.rb +5 -4
  196. data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
  197. data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
  198. data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
  199. data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
  200. data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
  201. data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
  202. data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
  203. data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
  204. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +4 -4
  205. data/lib/datadog/tracing/contrib/registry.rb +1 -1
  206. data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
  207. data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
  208. data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
  209. data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
  210. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
  211. data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
  212. data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
  213. data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
  214. data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
  215. data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
  216. data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
  217. data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
  218. data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
  219. data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
  220. data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
  221. data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
  222. data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
  223. data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
  224. data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
  225. data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
  226. data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
  227. data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
  228. data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
  229. data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
  230. data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
  231. data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
  232. data/lib/datadog/tracing/diagnostics/environment_logger.rb +5 -1
  233. data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
  234. data/lib/datadog/tracing/distributed/baggage.rb +73 -8
  235. data/lib/datadog/tracing/distributed/datadog.rb +4 -5
  236. data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
  237. data/lib/datadog/tracing/distributed/helpers.rb +1 -1
  238. data/lib/datadog/tracing/distributed/none.rb +4 -2
  239. data/lib/datadog/tracing/distributed/propagation.rb +4 -1
  240. data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
  241. data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
  242. data/lib/datadog/tracing/event.rb +5 -7
  243. data/lib/datadog/tracing/flush.rb +1 -1
  244. data/lib/datadog/tracing/metadata/analytics.rb +1 -1
  245. data/lib/datadog/tracing/metadata/tagging.rb +4 -4
  246. data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
  247. data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
  248. data/lib/datadog/tracing/pipeline.rb +1 -1
  249. data/lib/datadog/tracing/sampling/ext.rb +0 -2
  250. data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
  251. data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
  252. data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
  253. data/lib/datadog/tracing/span.rb +1 -1
  254. data/lib/datadog/tracing/span_event.rb +10 -10
  255. data/lib/datadog/tracing/span_link.rb +12 -12
  256. data/lib/datadog/tracing/span_operation.rb +9 -11
  257. data/lib/datadog/tracing/trace_digest.rb +21 -23
  258. data/lib/datadog/tracing/trace_operation.rb +84 -88
  259. data/lib/datadog/tracing/trace_segment.rb +2 -2
  260. data/lib/datadog/tracing/tracer.rb +36 -38
  261. data/lib/datadog/tracing/transport/http/client.rb +1 -1
  262. data/lib/datadog/tracing/transport/http/traces.rb +2 -2
  263. data/lib/datadog/tracing/transport/io/client.rb +5 -5
  264. data/lib/datadog/tracing/transport/io/traces.rb +4 -4
  265. data/lib/datadog/tracing/transport/statistics.rb +1 -1
  266. data/lib/datadog/tracing/transport/traces.rb +5 -5
  267. data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
  268. data/lib/datadog/tracing/workers.rb +2 -2
  269. data/lib/datadog/tracing.rb +2 -2
  270. data/lib/datadog/version.rb +1 -1
  271. metadata +15 -6
@@ -21,7 +21,7 @@ module Datadog
21
21
  def format(hash_obj, options = {})
22
22
  options ||= {}
23
23
  format!(hash_obj, options)
24
- rescue StandardError
24
+ rescue
25
25
  options[:placeholder] || PLACEHOLDER
26
26
  end
27
27
 
@@ -66,7 +66,7 @@ module Datadog
66
66
  def format_array(value, options)
67
67
  if value.any? { |v| v.class <= ::Hash || v.class <= Array }
68
68
  first_entry = format_value(value.first, options)
69
- value.size > 1 ? [first_entry, options[:placeholder]] : [first_entry]
69
+ (value.size > 1) ? [first_entry, options[:placeholder]] : [first_entry]
70
70
  # Otherwise short-circuit and return single placeholder
71
71
  else
72
72
  [options[:placeholder]]
@@ -77,19 +77,19 @@ module Datadog
77
77
  {}.tap do |options|
78
78
  # Show
79
79
  # If either is :all, value becomes :all
80
- options[:show] = if original[:show] == :all || additional[:show] == :all
81
- :all
82
- else
83
- (original[:show] || []).dup.concat(additional[:show] || []).uniq
84
- end
80
+ options[:show] = if original[:show] == :all || additional[:show] == :all
81
+ :all
82
+ else
83
+ (original[:show] || []).dup.concat(additional[:show] || []).uniq
84
+ end
85
85
 
86
86
  # Exclude
87
87
  # If either is :all, value becomes :all
88
88
  options[:exclude] = if original[:exclude] == :all || additional[:exclude] == :all
89
- :all
90
- else
91
- (original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq
92
- end
89
+ :all
90
+ else
91
+ (original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq
92
+ end
93
93
 
94
94
  options[:placeholder] = additional[:placeholder] || original[:placeholder]
95
95
  end
@@ -16,16 +16,16 @@ module Datadog
16
16
  # but adjusted to parse only <scheme>://<host>:<port>/ components
17
17
  # and stop there, since we don't care about the path, query string,
18
18
  # and fragment components
19
- RFC3986_URL_BASE = /\A(?<URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*+):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*+)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h++\.[!$&-.0-;=A-Z_a-z~]++))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+))(?::(?<port>\d*+))?)))(?:\/|\z)/.freeze # rubocop:disable Style/RegexpLiteral, Layout/LineLength
19
+ RFC3986_URL_BASE = /\A(?<URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*+):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*+)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h++\.[!$&-.0-;=A-Z_a-z~]++))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*+))(?::(?<port>\d*+))?)))(?:\/|\z)/.freeze # rubocop:disable Layout/LineLength
20
20
 
21
21
  module_function
22
22
 
23
23
  def url(url, options = {})
24
24
  url!(url, options)
25
- rescue StandardError
25
+ rescue
26
26
  placeholder = options[:placeholder] || PLACEHOLDER
27
27
 
28
- options[:base] == :exclude ? placeholder : "#{base_url(url)}/#{placeholder}"
28
+ (options[:base] == :exclude) ? placeholder : "#{base_url(url)}/#{placeholder}"
29
29
  end
30
30
 
31
31
  def base_url(url, options = {})
@@ -43,7 +43,7 @@ module Datadog
43
43
  # Format the query string
44
44
  if uri.query
45
45
  query = query(uri.query, options[:query])
46
- uri.query = (!query.nil? && query.empty? ? nil : query)
46
+ uri.query = ((!query.nil? && query.empty?) ? nil : query)
47
47
  end
48
48
 
49
49
  # Remove any URI fragments
@@ -59,7 +59,7 @@ module Datadog
59
59
 
60
60
  def query(query, options = {})
61
61
  query!(query, options)
62
- rescue StandardError
62
+ rescue
63
63
  options[:placeholder] || PLACEHOLDER
64
64
  end
65
65
 
@@ -78,7 +78,7 @@ module Datadog
78
78
  if options[:exclude].include?(key)
79
79
  [nil, nil]
80
80
  else
81
- value = options[:show] == :all || options[:show].include?(key) ? value : nil
81
+ value = (options[:show] == :all || options[:show].include?(key)) ? value : nil
82
82
  [key, value]
83
83
  end
84
84
  end
@@ -86,7 +86,11 @@ module Datadog
86
86
  sampler = Datadog.configuration.tracing.sampler
87
87
  return Datadog.configuration.tracing.sampling.default_rate unless sampler
88
88
 
89
- sampler.sample_rate(nil) rescue nil
89
+ begin
90
+ sampler.sample_rate(nil)
91
+ rescue
92
+ nil
93
+ end
90
94
  end
91
95
 
92
96
  # DEV: We currently only support SimpleRule instances.
@@ -28,7 +28,7 @@ module Datadog
28
28
  span_id = digest.span_id || 0 # Fall back to zero (invalid) if not present
29
29
 
30
30
  # DEV: We need these to be hex encoded
31
- value = "#{format('%032x', digest.trace_id)}-#{format('%016x', span_id)}"
31
+ value = "#{format("%032x", digest.trace_id)}-#{format("%016x", span_id)}"
32
32
 
33
33
  if digest.trace_sampling_priority
34
34
  sampling_priority = Helpers.clamp_sampling_priority(
@@ -17,15 +17,18 @@ module Datadog
17
17
  BAGGAGE_KEY = 'baggage'
18
18
  DD_TRACE_BAGGAGE_MAX_ITEMS = 64
19
19
  DD_TRACE_BAGGAGE_MAX_BYTES = 8192
20
+ BAGGAGE_TAG_KEYS_MATCH_ALL = ['*'].freeze
20
21
  SAFE_CHARACTERS_KEY = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$!#&'*+-.^_`|~"
21
22
  SAFE_CHARACTERS_VALUE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$!#&'()*+-./:<>?@[]^_`{|}~"
22
23
 
23
24
  def initialize(
24
25
  fetcher:,
25
- baggage_key: BAGGAGE_KEY
26
+ baggage_key: BAGGAGE_KEY,
27
+ baggage_tag_keys: ::Datadog.configuration.tracing.baggage_tag_keys
26
28
  )
27
29
  @baggage_key = baggage_key
28
30
  @fetcher = fetcher
31
+ @baggage_tag_keys = baggage_tag_keys
29
32
  end
30
33
 
31
34
  def inject!(digest, data)
@@ -36,7 +39,13 @@ module Datadog
36
39
 
37
40
  begin
38
41
  if baggage_items.size > DD_TRACE_BAGGAGE_MAX_ITEMS
39
- ::Datadog.logger.warn('Baggage item limit exceeded, dropping excess items')
42
+ ::Datadog.logger.warn("Baggage item limit (#{DD_TRACE_BAGGAGE_MAX_ITEMS}) exceeded, dropping excess items")
43
+ # Record telemetry for item count truncation
44
+ record_telemetry_metric(
45
+ 'context_header.truncated',
46
+ 1,
47
+ {'header_style' => 'baggage', 'truncation_reason' => 'baggage_item_count_exceeded'}
48
+ )
40
49
  baggage_items = baggage_items.first(DD_TRACE_BAGGAGE_MAX_ITEMS)
41
50
  end
42
51
 
@@ -47,7 +56,13 @@ module Datadog
47
56
  item = "#{encode_item(key, SAFE_CHARACTERS_KEY)}=#{encode_item(value, SAFE_CHARACTERS_VALUE)}"
48
57
  item_size = item.bytesize + (encoded_items.empty? ? 0 : 1) # +1 for comma if not first item
49
58
  if total_size + item_size > DD_TRACE_BAGGAGE_MAX_BYTES
50
- ::Datadog.logger.warn('Baggage header size exceeded, dropping excess items')
59
+ ::Datadog.logger.warn("Baggage header size (#{DD_TRACE_BAGGAGE_MAX_BYTES}) exceeded, dropping excess items")
60
+ # Record telemetry for byte count truncation
61
+ record_telemetry_metric(
62
+ 'context_header.truncated',
63
+ 1,
64
+ {'header_style' => 'baggage', 'truncation_reason' => 'baggage_byte_count_exceeded'}
65
+ )
51
66
  break # stop adding items when size limit is reached
52
67
  end
53
68
  encoded_items << item
@@ -57,10 +72,12 @@ module Datadog
57
72
  # edge case where a single item is too large
58
73
  return if encoded_items.empty?
59
74
 
60
- header_value = encoded_items.join(',')
61
- data[@baggage_key] = header_value
75
+ data[@baggage_key] = encoded_items.join(',')
76
+
77
+ # Record telemetry for successful injection
78
+ record_telemetry_metric('context_header_style.injected', 1, {'header_style' => 'baggage'})
62
79
  rescue => e
63
- ::Datadog.logger.warn("Failed to encode and inject baggage header: #{e.message}")
80
+ ::Datadog.logger.warn("Failed to encode and inject baggage header: #{e.class}: #{e}")
64
81
  end
65
82
  end
66
83
 
@@ -72,8 +89,17 @@ module Datadog
72
89
  baggage = parse_baggage_header(fetcher[@baggage_key])
73
90
  return unless baggage
74
91
 
92
+ # Convert selected baggage items to span tags based on configuration
93
+ baggage_tags = build_baggage_tags(baggage)
94
+
95
+ # Record telemetry for successful extraction only if baggage is not empty
96
+ unless baggage.empty?
97
+ record_telemetry_metric('context_header_style.extracted', 1, {'header_style' => 'baggage'})
98
+ end
99
+
75
100
  TraceDigest.new(
76
101
  baggage: baggage,
102
+ trace_distributed_tags: baggage_tags
77
103
  )
78
104
  end
79
105
 
@@ -115,16 +141,55 @@ module Datadog
115
141
  baggages.each do |key_value|
116
142
  key, value = key_value.split('=', 2)
117
143
  # If baggage is malformed, return an empty hash
118
- return {} unless key && value
144
+ if key.nil? || value.nil?
145
+ # Record telemetry for malformed header
146
+ record_telemetry_metric('context_header_style.malformed', 1, {'header_style' => 'baggage'})
147
+ return {}
148
+ end
119
149
 
120
150
  key = URI.decode_www_form_component(key.strip)
121
151
  value = URI.decode_www_form_component(value.strip)
122
- return {} if key.empty? || value.empty?
152
+ if key.empty? || value.empty?
153
+ # Record telemetry for malformed header
154
+ record_telemetry_metric('context_header_style.malformed', 1, {'header_style' => 'baggage'})
155
+ return {}
156
+ end
123
157
 
124
158
  baggage[key] = value
125
159
  end
126
160
  baggage
127
161
  end
162
+
163
+ # Convert selected baggage items to span tags
164
+ # Baggage carries important contextual information (like user.id, session.id) across distributed services,
165
+ # but isn't searchable by default.
166
+ def build_baggage_tags(baggage)
167
+ return {} if baggage.empty?
168
+
169
+ # Get the configuration for which baggage keys should become span tags
170
+ baggage_tag_keys = @baggage_tag_keys
171
+ return {} if baggage_tag_keys.empty?
172
+
173
+ # If wildcard is specified, use all baggage keys
174
+ baggage_tag_keys = baggage if baggage_tag_keys == BAGGAGE_TAG_KEYS_MATCH_ALL
175
+
176
+ tags = {}
177
+
178
+ baggage_tag_keys.each do |key, _| # rubocop:disable Style/HashEachMethods
179
+ value = baggage[key]
180
+ next if value.nil? || value.empty?
181
+
182
+ tags["baggage.#{key}"] = value
183
+ end
184
+
185
+ tags
186
+ end
187
+
188
+ # Record telemetry metrics for baggage operations
189
+ def record_telemetry_metric(metric_name, value, tags)
190
+ telemetry = ::Datadog.send(:components).telemetry
191
+ telemetry.inc('instrumentation_telemetry_data.tracers', metric_name, value, tags: tags)
192
+ end
128
193
  end
129
194
  end
130
195
  end
@@ -55,17 +55,16 @@ module Datadog
55
55
  def extract(data)
56
56
  fetcher = @fetcher.new(data)
57
57
 
58
- trace_id = parse_trace_id(fetcher)
58
+ trace_id = parse_trace_id(fetcher)
59
59
  parent_id = parse_parent_id(fetcher)
60
60
 
61
61
  sampling_priority = Helpers.parse_decimal_id(fetcher[@sampling_priority_key])
62
62
  origin = fetcher[@origin_key]
63
63
 
64
64
  # Return early if this propagation is not valid
65
- # DEV: To be valid we need to have a trace id and a parent id
66
- # or when it is a synthetics trace, just the trace id.
65
+ # DEV: To be valid we need to have a trace id and a parent id or an origin id.
67
66
  # DEV: `Fetcher#id` will not return 0
68
- return unless (trace_id && parent_id) || (origin && trace_id)
67
+ return if trace_id.nil? || parent_id.nil? && origin.nil?
69
68
 
70
69
  trace_distributed_tags = extract_tags(fetcher)
71
70
 
@@ -173,7 +172,7 @@ module Datadog
173
172
 
174
173
  def set_tags_propagation_error(reason:)
175
174
  active_trace = Tracing.active_trace
176
- active_trace.set_tag('_dd.propagation_error', reason) if active_trace
175
+ active_trace&.set_tag('_dd.propagation_error', reason)
177
176
  nil
178
177
  end
179
178
 
@@ -31,19 +31,17 @@ module Datadog
31
31
  # @return [String] serialized tags hash
32
32
  # @raise [EncodingError] if tags cannot be serialized to the `x-datadog-tags` format
33
33
  def self.encode(tags)
34
- begin
35
- tags.map do |raw_key, raw_value|
36
- key = raw_key.to_s
37
- value = raw_value.to_s
34
+ tags.map do |raw_key, raw_value|
35
+ key = raw_key.to_s
36
+ value = raw_value.to_s
38
37
 
39
- raise EncodingError, "Invalid key `#{key}` for value `#{value}`" unless VALID_KEY_CHARS.match?(key)
40
- raise EncodingError, "Invalid value `#{value}` for key `#{key}`" unless VALID_VALUE_CHARS.match?(value)
38
+ raise EncodingError, "Invalid key `#{key}` for value `#{value}`" unless VALID_KEY_CHARS.match?(key)
39
+ raise EncodingError, "Invalid value `#{value}` for key `#{key}`" unless VALID_VALUE_CHARS.match?(value)
41
40
 
42
- "#{key}=#{value.strip}"
43
- end.join(',')
44
- rescue => e
45
- raise EncodingError, "Error encoding tags `#{tags}`: `#{e}`"
46
- end
41
+ "#{key}=#{value.strip}"
42
+ end.join(',')
43
+ rescue => e
44
+ raise EncodingError, "Error encoding tags `#{tags}`: `#{e}`"
47
45
  end
48
46
 
49
47
  # Deserializes a `x-datadog-tags`-formatted String into a {Hash<String,String>}.
@@ -52,7 +50,7 @@ module Datadog
52
50
  # @return [Hash<String,String>] decoded input as a hash of strings
53
51
  # @raise [DecodingError] if string does not conform to the `x-datadog-tags` format
54
52
  def self.decode(string)
55
- result = Hash[string.split(',').map do |raw_tag|
53
+ result = (string.split(',').map do |raw_tag|
56
54
  raw_tag.split('=', 2).tap do |raw_key, raw_value|
57
55
  key = raw_key.to_s
58
56
  value = raw_value.to_s
@@ -62,7 +60,7 @@ module Datadog
62
60
 
63
61
  value.strip!
64
62
  end
65
- end]
63
+ end).to_h
66
64
 
67
65
  raise DecodingError, "Invalid empty tags: #{string}" if result.empty? && !string.empty?
68
66
 
@@ -25,7 +25,7 @@ module Datadog
25
25
 
26
26
  value = value.to_s
27
27
 
28
- num = value.to_i
28
+ num = value.to_i
29
29
 
30
30
  # Ensure the parsed number is the same as the original string value
31
31
  # e.g. We want to make sure to throw away `'nan'.to_i == 0`
@@ -8,10 +8,12 @@ module Datadog
8
8
  # @see https://github.com/open-telemetry/opentelemetry-specification/blob/255a6c52b8914a2ed7e26bb5585abecab276aafc/specification/sdk-environment-variables.md?plain=1#L88
9
9
  class None
10
10
  # No-op
11
- def inject!(_digest, _data); end
11
+ def inject!(_digest, _data)
12
+ end
12
13
 
13
14
  # No-op
14
- def extract(_data); end
15
+ def extract(_data)
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -155,7 +155,10 @@ module Datadog
155
155
  # Merge with baggage if present
156
156
  digest = @baggage_propagator.extract(data)
157
157
  if digest
158
- extracted_trace_digest.merge(baggage: digest.baggage)
158
+ extracted_trace_digest.merge(
159
+ baggage: digest.baggage,
160
+ trace_distributed_tags: digest.trace_distributed_tags
161
+ )
159
162
  else
160
163
  extracted_trace_digest
161
164
  end
@@ -31,7 +31,7 @@ module Datadog
31
31
  return false
32
32
  end
33
33
 
34
- return pin_config[:distributed_tracing] if pin_config && pin_config.key?(:distributed_tracing)
34
+ return pin_config[:distributed_tracing] if pin_config&.key?(:distributed_tracing)
35
35
  return global_config[:distributed_tracing] if global_config
36
36
 
37
37
  true
@@ -52,7 +52,7 @@ module Datadog
52
52
  tags ||= {}
53
53
  tags[Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER] = decision
54
54
  when :drop
55
- tags.delete(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER) if tags
55
+ tags&.delete(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER)
56
56
  end
57
57
  end
58
58
 
@@ -128,7 +128,7 @@ module Datadog
128
128
  # @param parent_id [Integer] 64-bit
129
129
  # @param trace_flags [Integer] 8-bit
130
130
  def build_traceparent_string(trace_id, parent_id, trace_flags)
131
- "00-#{format('%032x', trace_id)}-#{format('%016x', parent_id)}-#{format('%02x', trace_flags)}"
131
+ "00-#{format("%032x", trace_id)}-#{format("%016x", parent_id)}-#{format("%02x", trace_flags)}"
132
132
  end
133
133
 
134
134
  # Sets the trace flag to an existing `trace_flags`.
@@ -148,12 +148,14 @@ module Datadog
148
148
 
149
149
  # @see https://www.w3.org/TR/trace-context/#tracestate-header
150
150
  def build_tracestate(digest)
151
- tracestate = String.new('dd=')
151
+ tracestate = +'dd='
152
152
  tracestate << last_dd_parent_id(digest)
153
153
  tracestate << "s:#{digest.trace_sampling_priority};" if digest.trace_sampling_priority
154
154
  tracestate << "o:#{serialize_origin(digest.trace_origin)};" if digest.trace_origin
155
155
 
156
- if digest.trace_distributed_tags
156
+ # Replacing this by safe navigation seems to have a different behaviour on Rubies <= 3.0.
157
+ # It cause a LocalJumpError in the CI.
158
+ if digest.trace_distributed_tags # rubocop:disable Style/SafeNavigation
157
159
  digest.trace_distributed_tags.each do |name, value|
158
160
  tag = "t.#{serialize_tag_key(name)}:#{serialize_tag_value(value)};"
159
161
 
@@ -187,7 +189,7 @@ module Datadog
187
189
  # Ensure the list has at most 31 elements, as we need to prepend Datadog's
188
190
  # entry and the limit is 32 elements total.
189
191
  vendors = vendors[0..30]
190
- "#{tracestate},#{vendors.join(',')}"
192
+ "#{tracestate},#{vendors.join(",")}"
191
193
  else
192
194
  tracestate.to_s
193
195
  end
@@ -199,7 +201,7 @@ module Datadog
199
201
  def last_dd_parent_id(digest)
200
202
  if !digest.span_remote
201
203
  span_id = digest.span_id || 0 # Fall back to zero (invalid) if not present
202
- "p:#{format('%016x', span_id)};"
204
+ "p:#{format("%016x", span_id)};"
203
205
  elsif digest.trace_distributed_tags&.key?(Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID)
204
206
  "p:#{digest.trace_distributed_tags[Tracing::Metadata::Ext::Distributed::TAG_DD_PARENT_ID]};"
205
207
  else
@@ -216,10 +218,10 @@ module Datadog
216
218
  # DEV: come from Datadog-controlled sources.
217
219
  # DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
218
220
  value = if INVALID_ORIGIN_CHARS.match?(value)
219
- value.gsub(INVALID_ORIGIN_CHARS, '_')
220
- else
221
- value
222
- end
221
+ value.gsub(INVALID_ORIGIN_CHARS, '_')
222
+ else
223
+ value
224
+ end
223
225
 
224
226
  if REMAP_ORIGIN_CHARS.match?(value)
225
227
  value.gsub(REMAP_ORIGIN_CHARS, '~')
@@ -253,10 +255,10 @@ module Datadog
253
255
  # DEV: come from Datadog-controlled sources.
254
256
  # DEV: Trying to `match?` is measurably faster than a `gsub` that does not match.
255
257
  ret = if INVALID_TAG_VALUE_CHARS.match?(value)
256
- value.gsub(INVALID_TAG_VALUE_CHARS, '_')
257
- else
258
- value
259
- end
258
+ value.gsub(INVALID_TAG_VALUE_CHARS, '_')
259
+ else
260
+ value
261
+ end
260
262
 
261
263
  # DEV: Checking for an unlikely '=' is faster than a no-op `tr`.
262
264
  if ret.include?('=')
@@ -333,7 +335,11 @@ module Datadog
333
335
  key, value = pair.split(':', 2)
334
336
  case key
335
337
  when 's'
336
- sampling_priority = Integer(value) rescue nil
338
+ sampling_priority = begin
339
+ Integer(value)
340
+ rescue
341
+ nil
342
+ end
337
343
  when 'o'
338
344
  origin = value
339
345
  when 'p'
@@ -350,7 +356,7 @@ module Datadog
350
356
  tags ||= {}
351
357
  tags["#{Tracing::Metadata::Ext::Distributed::TAGS_PREFIX}#{key}"] = value
352
358
  else
353
- unknown_fields ||= String.new
359
+ unknown_fields ||= +''
354
360
  unknown_fields << pair
355
361
  unknown_fields << ';'
356
362
  end
@@ -59,13 +59,11 @@ module Datadog
59
59
 
60
60
  def publish(*args)
61
61
  subscriptions.each do |block|
62
- begin
63
- block.call(*args)
64
- rescue StandardError => e
65
- Datadog.logger.debug do
66
- "Error while handling '#{name}' event with '#{block}': #{e.class.name} #{e.message} " \
67
- "at #{Array(e.backtrace).first}"
68
- end
62
+ block.call(*args)
63
+ rescue => e
64
+ Datadog.logger.debug do
65
+ "Error while handling '#{name}' event with '#{block}': #{e.class.name} #{e.message} " \
66
+ "at #{Array(e.backtrace).first}"
69
67
  end
70
68
  end
71
69
 
@@ -59,7 +59,7 @@ module Datadog
59
59
  class Finished < Base
60
60
  # Are all spans finished?
61
61
  def flush?(trace_op)
62
- trace_op && trace_op.finished?
62
+ trace_op&.finished?
63
63
  end
64
64
  end
65
65
 
@@ -12,7 +12,7 @@ module Datadog
12
12
  case key
13
13
  when Ext::Analytics::TAG_ENABLED
14
14
  # If true, set rate to 1.0, otherwise set 0.0.
15
- value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
15
+ value = (value == true) ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
16
16
  Tracing::Analytics.set_sample_rate(self, value)
17
17
  when Ext::Analytics::TAG_SAMPLE_RATE
18
18
  Tracing::Analytics.set_sample_rate(self, value)
@@ -51,7 +51,7 @@ module Datadog
51
51
  # Encode strings in UTF-8 to facilitate downstream serialization
52
52
  meta[Core::Utils.utf8_encode(key)] = Core::Utils.utf8_encode(value)
53
53
  end
54
- rescue StandardError => e
54
+ rescue => e
55
55
  Datadog.logger.debug("Unable to set the tag #{key}, ignoring it. Caused by: #{e}")
56
56
  end
57
57
 
@@ -80,10 +80,10 @@ module Datadog
80
80
  end
81
81
 
82
82
  # Convenient interface for setting a single tag.
83
- alias []= set_tag
83
+ alias_method :[]=, :set_tag
84
84
 
85
85
  # Convenient interface for getting a single tag.
86
- alias [] get_tag
86
+ alias_method :[], :get_tag
87
87
 
88
88
  # Return the metric with the given key, nil if it doesn't exist.
89
89
  def get_metric(key)
@@ -101,7 +101,7 @@ module Datadog
101
101
 
102
102
  # Encode strings in UTF-8 to facilitate downstream serialization
103
103
  metrics[Core::Utils.utf8_encode(key)] = value
104
- rescue StandardError => e
104
+ rescue => e
105
105
  Datadog.logger.debug("Unable to set the metric #{key}, ignoring it. Caused by: #{e}")
106
106
  end
107
107
 
@@ -38,7 +38,9 @@ module Datadog
38
38
  private
39
39
 
40
40
  def drop_it?(span)
41
- @operation.call(span) rescue false
41
+ @operation.call(span)
42
+ rescue
43
+ false
42
44
  end
43
45
  end
44
46
  end
@@ -28,7 +28,9 @@ module Datadog
28
28
  # @!visibility private
29
29
  def call(trace)
30
30
  trace.spans.each do |span|
31
- @operation.call(span) rescue next
31
+ @operation.call(span)
32
+ rescue
33
+ next
32
34
  end
33
35
 
34
36
  trace
@@ -47,7 +47,7 @@ module Datadog
47
47
  next nil if current_trace.nil? || current_trace.empty?
48
48
 
49
49
  process_result = processor.call(current_trace)
50
- process_result && process_result.empty? ? nil : process_result
50
+ (process_result && process_result.empty?) ? nil : process_result
51
51
  end
52
52
  rescue => e
53
53
  Datadog.logger.debug(
@@ -47,8 +47,6 @@ module Datadog
47
47
  MANUAL = '-4'
48
48
  # Formerly AppSec.
49
49
  ASM = '-5'
50
- # Single Span Sampled.
51
- SPAN_SAMPLING_RATE = '-8'
52
50
  # Dynamically configured rule, explicitly created by the user.
53
51
  REMOTE_USER_RULE = '-11'
54
52
  # Dynamically configured rule, automatically generated by Datadog.