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
@@ -30,26 +30,26 @@ module Datadog
30
30
  default_sampler: nil
31
31
  )
32
32
  @rules = if default_sample_rate && !default_sampler
33
- # Add to the end of the rule list a rule always matches any trace
34
- rules << SimpleRule.new(sample_rate: default_sample_rate)
35
- else
36
- rules
37
- end
33
+ # Add to the end of the rule list a rule always matches any trace
34
+ rules << SimpleRule.new(sample_rate: default_sample_rate)
35
+ else
36
+ rules
37
+ end
38
38
  @rate_limiter = if rate_limiter
39
- rate_limiter
40
- elsif rate_limit
41
- Core::TokenBucket.new(rate_limit)
42
- else
43
- Core::UnlimitedLimiter.new
44
- end
39
+ rate_limiter
40
+ elsif rate_limit
41
+ Core::TokenBucket.new(rate_limit)
42
+ else
43
+ Core::UnlimitedLimiter.new
44
+ end
45
45
  @default_sampler = if default_sampler
46
- default_sampler
47
- elsif default_sample_rate
48
- nil
49
- else
50
- # TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
51
- RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
52
- end
46
+ default_sampler
47
+ elsif default_sample_rate
48
+ nil
49
+ else
50
+ # TODO: Simplify .tags access, as `Tracer#tags` can't be arbitrarily changed anymore
51
+ RateByServiceSampler.new(1.0, env: -> { Tracing.send(:tracer).tags['env'] })
52
+ end
53
53
  end
54
54
 
55
55
  def self.parse(rules, rate_limit, default_sample_rate)
@@ -130,17 +130,17 @@ module Datadog
130
130
  set_limiter_metrics(trace, rate_limiter.effective_rate)
131
131
 
132
132
  provenance = case rule.provenance
133
- when Rule::PROVENANCE_REMOTE_USER
134
- Ext::Decision::REMOTE_USER_RULE
135
- when Rule::PROVENANCE_REMOTE_DYNAMIC
136
- Ext::Decision::REMOTE_DYNAMIC_RULE
137
- else
138
- Ext::Decision::TRACE_SAMPLING_RULE
139
- end
133
+ when Rule::PROVENANCE_REMOTE_USER
134
+ Ext::Decision::REMOTE_USER_RULE
135
+ when Rule::PROVENANCE_REMOTE_DYNAMIC
136
+ Ext::Decision::REMOTE_DYNAMIC_RULE
137
+ else
138
+ Ext::Decision::TRACE_SAMPLING_RULE
139
+ end
140
140
 
141
141
  trace.set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, provenance)
142
142
  end
143
- rescue StandardError => e
143
+ rescue => e
144
144
  Datadog.logger.error(
145
145
  "Rule sampling failed. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
146
146
  )
@@ -153,10 +153,10 @@ module Datadog
153
153
  # was responsible for the sampling decision.
154
154
  def set_priority(trace, sampled)
155
155
  trace.sampling_priority = if sampled
156
- Sampling::Ext::Priority::USER_KEEP
157
- else
158
- Sampling::Ext::Priority::USER_REJECT
159
- end
156
+ Sampling::Ext::Priority::USER_KEEP
157
+ else
158
+ Sampling::Ext::Priority::USER_REJECT
159
+ end
160
160
  end
161
161
 
162
162
  def set_rule_metrics(trace, sample_rate)
@@ -28,7 +28,7 @@ module Datadog
28
28
  list = JSON.parse(rules)
29
29
  rescue => e
30
30
  Datadog.logger.warn(
31
- "Error parsing Span Sampling Rules `#{rules.inspect}`: "\
31
+ "Error parsing Span Sampling Rules `#{rules.inspect}`: " \
32
32
  "#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
33
33
  )
34
34
  return nil
@@ -58,13 +58,6 @@ module Datadog
58
58
 
59
59
  next if decision == :not_matched # Iterate until we find a matching decision
60
60
 
61
- if decision == :kept
62
- trace_op.set_tag(
63
- Metadata::Ext::Distributed::TAG_DECISION_MAKER,
64
- Sampling::Ext::Decision::SPAN_SAMPLING_RATE
65
- )
66
- end
67
-
68
61
  break # Found either a `kept` or `rejected` decision
69
62
  end
70
63
 
@@ -113,7 +113,7 @@ module Datadog
113
113
  def stopped?
114
114
  !@end_time.nil?
115
115
  end
116
- alias :finished? :stopped?
116
+ alias_method :finished?, :stopped?
117
117
 
118
118
  def duration
119
119
  return @duration if @duration
@@ -41,7 +41,7 @@ module Datadog
41
41
  # of being limiting span events to the size limit of a span tag.
42
42
  # All Datadog agents support this format.
43
43
  def to_hash
44
- h = { 'name' => @name, 'time_unix_nano' => @time_unix_nano }
44
+ h = {'name' => @name, 'time_unix_nano' => @time_unix_nano}
45
45
  h['attributes'] = @attributes unless @attributes.empty?
46
46
  h
47
47
  end
@@ -51,15 +51,15 @@ module Datadog
51
51
  # This serialization format removes the serialization limitations of the `span.set_tag('events)` approach,
52
52
  # but is only supported by newer version of the Datadog agent.
53
53
  def to_native_format
54
- h = { 'name' => @name, 'time_unix_nano' => @time_unix_nano }
54
+ h = {'name' => @name, 'time_unix_nano' => @time_unix_nano}
55
55
 
56
56
  attr = {}
57
57
  @attributes.each do |key, value|
58
58
  attr[key] = if value.is_a?(Array)
59
- { type: ARRAY_TYPE, array_value: { values: value.map { |v| serialize_native_attribute(v) } } }
60
- else
61
- serialize_native_attribute(value)
62
- end
59
+ {type: ARRAY_TYPE, array_value: {values: value.map { |v| serialize_native_attribute(v) }}}
60
+ else
61
+ serialize_native_attribute(value)
62
+ end
63
63
  end
64
64
 
65
65
  h['attributes'] = attr unless @attributes.empty?
@@ -144,13 +144,13 @@ module Datadog
144
144
  def serialize_native_attribute(value)
145
145
  case value
146
146
  when String
147
- { type: STRING_TYPE, string_value: value }
147
+ {type: STRING_TYPE, string_value: value}
148
148
  when TrueClass, FalseClass
149
- { type: BOOLEAN_TYPE, bool_value: value }
149
+ {type: BOOLEAN_TYPE, bool_value: value}
150
150
  when Integer
151
- { type: INTEGER_TYPE, int_value: value }
151
+ {type: INTEGER_TYPE, int_value: value}
152
152
  when Float
153
- { type: DOUBLE_TYPE, double_value: value }
153
+ {type: DOUBLE_TYPE, double_value: value}
154
154
  else
155
155
  # This is technically unreachable due to the validation in #initialize.
156
156
  raise ArgumentError, "Attribute must be a string, number, or boolean: #{value}."
@@ -47,15 +47,15 @@ module Datadog
47
47
  @span_id = digest.span_id
48
48
  @trace_id = digest.trace_id
49
49
  @trace_flags = if digest.trace_sampling_priority.nil?
50
- nil
51
- elsif digest.trace_sampling_priority > 0
52
- 1
53
- else
54
- 0
55
- end
56
- @trace_state = digest.trace_state && digest.trace_state.dup
50
+ nil
51
+ elsif digest.trace_sampling_priority > 0
52
+ 1
53
+ else
54
+ 0
55
+ end
56
+ @trace_state = digest.trace_state&.dup
57
57
  @dropped_attributes = 0
58
- @attributes = (attributes && attributes.dup) || {}
58
+ @attributes = attributes&.dup || {}
59
59
  end
60
60
 
61
61
  def to_hash
@@ -81,10 +81,10 @@ module Datadog
81
81
  # If traceflags set, the high bit (bit 31) should be set to 1 (uint32).
82
82
  # This helps us distinguish between when the sample decision is zero or not set
83
83
  h[:flags] = if @trace_flags.nil?
84
- 0
85
- else
86
- @trace_flags | (1 << 31)
87
- end
84
+ 0
85
+ else
86
+ @trace_flags | (1 << 31)
87
+ end
88
88
  h
89
89
  end
90
90
  end
@@ -157,7 +157,7 @@ module Datadog
157
157
  # running, to minimize impact on normal application function.
158
158
  begin
159
159
  start
160
- rescue StandardError => e
160
+ rescue => e
161
161
  logger.debug { "Failed to start span: #{e}" }
162
162
  ensure
163
163
  # We should yield to the provided block when possible, as this
@@ -387,7 +387,7 @@ module Datadog
387
387
  class Events
388
388
  include Tracing::Events
389
389
 
390
- DEFAULT_ON_ERROR = proc { |span_op, error| span_op.set_error(error) unless span_op.nil? }
390
+ DEFAULT_ON_ERROR = proc { |span_op, error| span_op&.set_error(error) }
391
391
 
392
392
  attr_reader \
393
393
  :logger,
@@ -448,23 +448,21 @@ module Datadog
448
448
  original = @handler
449
449
 
450
450
  @handler = proc do |op, error|
451
- begin
452
- yield(op, error)
453
- rescue StandardError => e
454
- logger.debug do
455
- "Custom on_error handler #{@handler} failed, using fallback behavior. \
451
+ yield(op, error)
452
+ rescue => e
453
+ logger.debug do
454
+ "Custom on_error handler #{@handler} failed, using fallback behavior. \
456
455
  Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
457
- end
458
-
459
- original.call(op, error) if original
460
456
  end
457
+
458
+ original&.call(op, error)
461
459
  end
462
460
  end
463
461
 
464
462
  def publish(*args)
465
463
  begin
466
464
  @handler.call(*args)
467
- rescue StandardError => e
465
+ rescue => e
468
466
  logger.debug do
469
467
  "Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
470
468
  end
@@ -162,29 +162,27 @@ module Datadog
162
162
  # DEV: Because we want to sometimes freeze the values provided to `TraceDigest`, it's best
163
163
  # DEV: to let `#initialize` decide how to handle each field, instead of duplicating that logic here.
164
164
  TraceDigest.new(
165
- **{
166
- span_id: span_id,
167
- span_name: span_name,
168
- span_resource: span_resource,
169
- span_service: span_service,
170
- span_type: span_type,
171
- trace_distributed_tags: trace_distributed_tags,
172
- trace_hostname: trace_hostname,
173
- trace_id: trace_id,
174
- trace_name: trace_name,
175
- trace_origin: trace_origin,
176
- trace_process_id: trace_process_id,
177
- trace_resource: trace_resource,
178
- trace_runtime_id: trace_runtime_id,
179
- trace_sampling_priority: trace_sampling_priority,
180
- trace_service: trace_service,
181
- trace_distributed_id: trace_distributed_id,
182
- trace_flags: trace_flags,
183
- trace_state: trace_state,
184
- trace_state_unknown_fields: trace_state_unknown_fields,
185
- span_remote: span_remote,
186
- baggage: baggage
187
- }.merge!(field_value_pairs)
165
+ span_id: span_id,
166
+ span_name: span_name,
167
+ span_resource: span_resource,
168
+ span_service: span_service,
169
+ span_type: span_type,
170
+ trace_distributed_tags: trace_distributed_tags,
171
+ trace_hostname: trace_hostname,
172
+ trace_id: trace_id,
173
+ trace_name: trace_name,
174
+ trace_origin: trace_origin,
175
+ trace_process_id: trace_process_id,
176
+ trace_resource: trace_resource,
177
+ trace_runtime_id: trace_runtime_id,
178
+ trace_sampling_priority: trace_sampling_priority,
179
+ trace_service: trace_service,
180
+ trace_distributed_id: trace_distributed_id,
181
+ trace_flags: trace_flags,
182
+ trace_state: trace_state,
183
+ trace_state_unknown_fields: trace_state_unknown_fields,
184
+ span_remote: span_remote,
185
+ baggage: baggage, **field_value_pairs
188
186
  )
189
187
  end
190
188
  end
@@ -163,20 +163,20 @@ module Datadog
163
163
  end
164
164
 
165
165
  def name
166
- @name || (root_span && root_span.name)
166
+ @name || root_span&.name
167
167
  end
168
168
 
169
169
  def resource
170
- @resource || (root_span && root_span.resource)
170
+ @resource || root_span&.resource
171
171
  end
172
172
 
173
173
  # When retrieving tags or metrics we need to include root span tags for sampling purposes
174
174
  def get_tag(key)
175
- super || (root_span && root_span.get_tag(key))
175
+ super || root_span&.get_tag(key)
176
176
  end
177
177
 
178
178
  def get_metric(key)
179
- super || (root_span && root_span.get_metric(key))
179
+ super || root_span&.get_metric(key)
180
180
  end
181
181
 
182
182
  def set_distributed_source(product_bit)
@@ -201,7 +201,7 @@ module Datadog
201
201
  end
202
202
 
203
203
  def service
204
- @service || (root_span && root_span.service)
204
+ @service || root_span&.service
205
205
  end
206
206
 
207
207
  def measure(
@@ -220,9 +220,11 @@ module Datadog
220
220
  # Don't allow more span measurements if the
221
221
  # trace is already completed. Prevents multiple
222
222
  # root spans with parent_span_id = 0.
223
- return yield( # rubocop:disable Style/MultilineIfModifier
224
- SpanOperation.new(op_name, logger: logger),
225
- TraceOperation.new(logger: logger)) if finished? || full?
223
+ if finished? || full?
224
+ return yield(
225
+ SpanOperation.new(op_name, logger: logger),
226
+ TraceOperation.new(logger: logger))
227
+ end
226
228
 
227
229
  # Create new span
228
230
  span_op = build_span(
@@ -253,51 +255,49 @@ module Datadog
253
255
  type: nil,
254
256
  id: nil
255
257
  )
256
- begin
257
- # Resolve span options:
258
- # Parent, service name, etc.
259
- # Add default options
260
- trace_id = @id
261
- parent = @active_span
262
-
263
- # Use active span's span ID if available. Otherwise, the parent span ID.
264
- # Necessary when this trace continues from another, e.g. distributed trace.
265
- parent_id = parent ? parent.id : @parent_span_id || 0
266
-
267
- # Build events
268
- events ||= SpanOperation::Events.new(logger: logger)
269
-
270
- # Before start: activate the span, publish events.
271
- events.before_start.subscribe do |span_op|
272
- start_span(span_op)
273
- end
258
+ # Resolve span options:
259
+ # Parent, service name, etc.
260
+ # Add default options
261
+ trace_id = @id
262
+ parent = @active_span
274
263
 
275
- # After finish: deactivate the span, record, publish events.
276
- events.after_finish.subscribe do |span, span_op|
277
- finish_span(span, span_op, parent)
278
- end
264
+ # Use active span's span ID if available. Otherwise, the parent span ID.
265
+ # Necessary when this trace continues from another, e.g. distributed trace.
266
+ parent_id = parent ? parent.id : @parent_span_id || 0
267
+
268
+ # Build events
269
+ events ||= SpanOperation::Events.new(logger: logger)
279
270
 
280
- # Build a new span operation
281
- SpanOperation.new(
282
- op_name,
283
- logger: logger,
284
- events: events,
285
- on_error: on_error,
286
- parent_id: parent_id,
287
- resource: resource || op_name,
288
- service: service,
289
- start_time: start_time,
290
- tags: tags,
291
- trace_id: trace_id,
292
- type: type,
293
- id: id
294
- )
295
- rescue StandardError => e
296
- logger.debug { "Failed to build new span: #{e}" }
297
-
298
- # Return dummy span
299
- SpanOperation.new(op_name, logger: logger)
271
+ # Before start: activate the span, publish events.
272
+ events.before_start.subscribe do |span_op|
273
+ start_span(span_op)
300
274
  end
275
+
276
+ # After finish: deactivate the span, record, publish events.
277
+ events.after_finish.subscribe do |span, span_op|
278
+ finish_span(span, span_op, parent)
279
+ end
280
+
281
+ # Build a new span operation
282
+ SpanOperation.new(
283
+ op_name,
284
+ logger: logger,
285
+ events: events,
286
+ on_error: on_error,
287
+ parent_id: parent_id,
288
+ resource: resource || op_name,
289
+ service: service,
290
+ start_time: start_time,
291
+ tags: tags,
292
+ trace_id: trace_id,
293
+ type: type,
294
+ id: id
295
+ )
296
+ rescue => e
297
+ logger.debug { "Failed to build new span: #{e}" }
298
+
299
+ # Return dummy span
300
+ SpanOperation.new(op_name, logger: logger)
301
301
  end
302
302
 
303
303
  # Returns a {TraceSegment} with all finished spans that can be flushed
@@ -325,7 +325,7 @@ module Datadog
325
325
  # We should move the sample call to inject and right before moving to new contexts(threads, forking etc.)
326
326
  def to_digest
327
327
  # Resolve current span ID
328
- span_id = @active_span && @active_span.id
328
+ span_id = @active_span&.id
329
329
  span_id ||= @parent_span_id unless finished?
330
330
  # sample the trace_operation with the tracer
331
331
  events.trace_propagated.publish(self)
@@ -349,13 +349,13 @@ module Datadog
349
349
  trace_state: @trace_state,
350
350
  trace_state_unknown_fields: @trace_state_unknown_fields,
351
351
  span_remote: @remote_parent && @active_span.nil?,
352
- baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
352
+ baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
353
353
  ).freeze
354
354
  end
355
355
 
356
356
  def to_correlation
357
357
  # Resolve current span ID
358
- span_id = @active_span && @active_span.id
358
+ span_id = @active_span&.id
359
359
  span_id ||= @parent_span_id unless finished?
360
360
 
361
361
  Correlation::Identifier.new(
@@ -369,22 +369,22 @@ module Datadog
369
369
  def fork_clone
370
370
  self.class.new(
371
371
  agent_sample_rate: @agent_sample_rate,
372
- events: @events && @events.dup,
373
- hostname: @hostname && @hostname.dup,
372
+ events: @events&.dup,
373
+ hostname: @hostname&.dup,
374
374
  id: @id,
375
375
  max_length: @max_length,
376
- name: name && name.dup,
377
- origin: @origin && @origin.dup,
378
- parent_span_id: (@active_span && @active_span.id) || @parent_span_id,
376
+ name: name&.dup,
377
+ origin: @origin&.dup,
378
+ parent_span_id: @active_span&.id || @parent_span_id,
379
379
  rate_limiter_rate: @rate_limiter_rate,
380
- resource: resource && resource.dup,
380
+ resource: resource&.dup,
381
381
  rule_sample_rate: @rule_sample_rate,
382
382
  sample_rate: @sample_rate,
383
383
  sampled: @sampled,
384
384
  sampling_priority: @sampling_priority,
385
- service: service && service.dup,
386
- trace_state: @trace_state && @trace_state.dup,
387
- trace_state_unknown_fields: @trace_state_unknown_fields && @trace_state_unknown_fields.dup,
385
+ service: service&.dup,
386
+ trace_state: @trace_state&.dup,
387
+ trace_state_unknown_fields: @trace_state_unknown_fields&.dup,
388
388
  tags: meta.dup,
389
389
  metrics: metrics.dup,
390
390
  remote_parent: @remote_parent
@@ -472,41 +472,37 @@ module Datadog
472
472
  end
473
473
 
474
474
  def start_span(span_op)
475
- begin
476
- activate_span!(span_op)
475
+ activate_span!(span_op)
477
476
 
478
- # Update active span count
479
- @active_span_count += 1
477
+ # Update active span count
478
+ @active_span_count += 1
480
479
 
481
- # Publish :span_before_start event
482
- events.span_before_start.publish(span_op, self)
483
- rescue StandardError => e
484
- logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
485
- end
480
+ # Publish :span_before_start event
481
+ events.span_before_start.publish(span_op, self)
482
+ rescue => e
483
+ logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
486
484
  end
487
485
 
488
486
  def finish_span(span, span_op, parent)
489
- begin
490
- # Save finished span & root span
491
- @spans << span unless span.nil?
487
+ # Save finished span & root span
488
+ @spans << span unless span.nil?
492
489
 
493
- # Deactivate the span, re-activate parent.
494
- deactivate_span!(span_op)
490
+ # Deactivate the span, re-activate parent.
491
+ deactivate_span!(span_op)
495
492
 
496
- # Set finished, to signal root span has completed.
497
- @finished = true if span_op == root_span
493
+ # Set finished, to signal root span has completed.
494
+ @finished = true if span_op == root_span
498
495
 
499
- # Update active span count
500
- @active_span_count -= 1
496
+ # Update active span count
497
+ @active_span_count -= 1
501
498
 
502
- # Publish :span_finished event
503
- events.span_finished.publish(span, self)
499
+ # Publish :span_finished event
500
+ events.span_finished.publish(span, self)
504
501
 
505
- # Publish :trace_finished event
506
- events.trace_finished.publish(self) if finished?
507
- rescue StandardError => e
508
- logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
509
- end
502
+ # Publish :trace_finished event
503
+ events.trace_finished.publish(self) if finished?
504
+ rescue => e
505
+ logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
510
506
  end
511
507
 
512
508
  # Track the root span
@@ -535,7 +531,7 @@ module Datadog
535
531
  service: service,
536
532
  tags: meta,
537
533
  metrics: metrics,
538
- root_span_id: !partial ? root_span && root_span.id : nil,
534
+ root_span_id: (!partial) ? root_span&.id : nil,
539
535
  profiling_enabled: @profiling_enabled,
540
536
  apm_tracing_enabled: @apm_tracing_enabled
541
537
  )
@@ -68,8 +68,8 @@ module Datadog
68
68
 
69
69
  # Does not make an effort to move metrics out of tags
70
70
  # The caller is expected to have done that
71
- @meta = (tags && tags.dup) || {}
72
- @metrics = (metrics && metrics.dup) || {}
71
+ @meta = tags&.dup || {}
72
+ @metrics = metrics&.dup || {}
73
73
 
74
74
  # Set well-known tags, defaulting to getting the values from tags
75
75
  @agent_sample_rate = agent_sample_rate || agent_sample_rate_tag