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
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module DI
5
+ module ProbeFileLoader
6
+ # Railtie class initializes dynamic instrumentation contrib code
7
+ # in Rails environments.
8
+ class Railtie < Rails::Railtie
9
+ initializer 'datadog.dynamic_instrumentation.load_probe_file' do |app| # steep:ignore
10
+ ProbeFileLoader.load_now
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Datadog
6
+ module DI
7
+ module ProbeFileLoader
8
+ module_function def load_now_or_later
9
+ if Datadog::Core::Contrib::Rails::Utils.railtie_supported?
10
+ Datadog.logger.debug('di: loading probe_file_loader/railtie')
11
+ require_relative 'probe_file_loader/railtie'
12
+ else
13
+ load_now
14
+ end
15
+ end
16
+
17
+ # This method can be called more than once, to attempt to load
18
+ # DI components that depend on third-party libraries after additional
19
+ # dependencies are loaded (or potentially loaded).
20
+ module_function def load_now
21
+ should_propagate = false
22
+
23
+ probe_file_path = ENV['DD_DYNAMIC_INSTRUMENTATION_PROBE_FILE']
24
+ if probe_file_path.nil? || probe_file_path.empty?
25
+ return
26
+ end
27
+
28
+ # We want to initialize the component tree here if it was not already
29
+ # initialized.
30
+ component = Datadog::DI.component
31
+ return unless component
32
+
33
+ begin
34
+ probe_specs = File.open(probe_file_path) do |f|
35
+ # The probe file should contain an array, JSON.parse does not work
36
+ JSON.load(f) # standard:disable Security/JSONLoad
37
+ end
38
+
39
+ probe_specs.each do |probe_spec|
40
+ probe = component.parse_probe_spec_and_notify(probe_spec)
41
+ component.logger.debug { "di: received #{probe.type} probe at #{probe.location} (#{probe.id}) via probe file: #{probe_file_path}" }
42
+
43
+ begin
44
+ component.probe_manager.add_probe(probe)
45
+ rescue DI::Error::DITargetNotInRegistry => exc
46
+ component.telemetry&.report(exc, description: "Line probe is targeting a loaded file that is not in code tracker")
47
+
48
+ payload = component.probe_notification_builder.build_errored(probe, exc)
49
+ component.probe_notifier_worker.add_status(payload)
50
+ rescue => exc
51
+ raise if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
52
+
53
+ component.logger.debug { "di: unhandled exception adding #{probe.type} probe at #{probe.location} (#{probe.id}) in DI probe file loader: #{exc.class}: #{exc}" }
54
+ component.telemetry&.report(exc, description: "Unhandled exception adding probe in DI probe file loader")
55
+
56
+ # TODO test this path
57
+ payload = component.probe_notification_builder.build_errored(probe, exc)
58
+ component.probe_notifier_worker.add_status(payload)
59
+ end
60
+ end
61
+ rescue => exc
62
+ if component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
63
+ should_propagate = true
64
+ raise
65
+ end
66
+
67
+ component.logger.debug { "di: unhandled exception handling a probe in DI probe file loader: #{exc.class}: #{exc}" }
68
+ component.telemetry&.report(exc, description: "Unhandled exception handling probe in DI probe file loader")
69
+ end
70
+ rescue
71
+ # We should generally never get here, but if component tree
72
+ # initialization fails for some unexpected reason, don't nuke
73
+ # the customer application.
74
+ #
75
+ # For the same reason, we do not check
76
+ # component.settings.dynamic_instrumentation.internal.propagate_all_exceptions
77
+ # here again, but rely on the local variable storing that value.
78
+ raise if should_propagate
79
+ end
80
+ end
81
+ end
82
+ end
@@ -43,6 +43,8 @@ module Datadog
43
43
  if component
44
44
 
45
45
  probe_manager = component.probe_manager
46
+ probe_notification_builder = component.probe_notification_builder
47
+ probe_notifier_worker = component.probe_notifier_worker
46
48
 
47
49
  current_probe_ids = {}
48
50
  repository.contents.each do |content|
@@ -50,11 +52,7 @@ module Datadog
50
52
  when PRODUCT
51
53
  begin
52
54
  probe_spec = parse_content(content)
53
- probe = ProbeBuilder.build_from_remote_config(probe_spec)
54
- probe_notification_builder = component.probe_notification_builder
55
- payload = probe_notification_builder.build_received(probe)
56
- probe_notifier_worker = component.probe_notifier_worker
57
- probe_notifier_worker.add_status(payload)
55
+ probe = component.parse_probe_spec_and_notify(probe_spec)
58
56
  component.logger.debug { "di: received #{probe.type} probe at #{probe.location} (#{probe.id}) via RC" }
59
57
 
60
58
  begin
data/lib/datadog/di.rb CHANGED
@@ -19,7 +19,6 @@ module Datadog
19
19
  Extensions.activate!
20
20
 
21
21
  class << self
22
-
23
22
  # This method is called from DI Remote handler to issue DI operations
24
23
  # to the probe manager (add or remove probes).
25
24
  #
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../../identity'
4
+ require_relative '../../../appsec/trace_keeper'
4
5
 
5
6
  module Datadog
6
7
  module Kit
@@ -60,7 +61,7 @@ module Datadog
60
61
  span.set_tag('appsec.events.users.login.success.track', 'true')
61
62
  span.set_tag('_dd.appsec.events.users.login.success.sdk', 'true')
62
63
 
63
- trace.keep!
64
+ ::Datadog::AppSec::TraceKeeper.keep!(trace)
64
65
 
65
66
  record_event_telemetry_metric(LOGIN_SUCCESS_EVENT)
66
67
  ::Datadog::AppSec::Instrumentation.gateway.push('appsec.events.user_lifecycle', LOGIN_SUCCESS_EVENT)
@@ -116,7 +117,7 @@ module Datadog
116
117
  span.set_tag('appsec.events.users.login.failure.usr.login', login)
117
118
  span.set_tag('appsec.events.users.login.failure.usr.exists', user_exists.to_s)
118
119
 
119
- trace.keep!
120
+ ::Datadog::AppSec::TraceKeeper.keep!(trace)
120
121
 
121
122
  record_event_telemetry_metric(LOGIN_FAILURE_EVENT)
122
123
  ::Datadog::AppSec::Instrumentation.gateway.push('appsec.events.user_lifecycle', LOGIN_FAILURE_EVENT)
@@ -148,9 +149,9 @@ module Datadog
148
149
 
149
150
  case user_or_id
150
151
  when nil
151
- { login: login }
152
+ {login: login}
152
153
  when String
153
- { login: login, id: user_or_id }
154
+ {login: login, id: user_or_id}
154
155
  when Hash
155
156
  raise ArgumentError, 'missing required user key `:id`' unless user_or_id.key?(:id)
156
157
  raise TypeError, 'user key `:id` must be a String' unless user_or_id[:id].is_a?(String)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../identity'
4
+ require_relative '../../appsec/trace_keeper'
4
5
 
5
6
  module Datadog
6
7
  module Kit
@@ -10,7 +11,7 @@ module Datadog
10
11
  LOGIN_SUCCESS_EVENT = 'users.login.success'
11
12
  LOGIN_FAILURE_EVENT = 'users.login.failure'
12
13
  SIGNUP_EVENT = 'users.signup'
13
- USER_LOGIN_KEYS = ['usr.login', :'usr.login'].freeze
14
+ USER_LOGIN_KEYS = ['usr.login', :"usr.login"].freeze
14
15
 
15
16
  class << self
16
17
  # Attach login success event information to the trace
@@ -31,12 +32,12 @@ module Datadog
31
32
  set_trace_and_span_context('track_login_success', trace, span) do |active_trace, active_span|
32
33
  user_options = user.dup
33
34
  user_id = user_options.delete(:id)
34
- user_login = user_options[:login] || others[:'usr.login'] || others['usr.login'] || user_id
35
+ user_login = user_options[:login] || others[:"usr.login"] || others['usr.login'] || user_id
35
36
 
36
37
  raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
37
38
 
38
39
  others = others.reject { |key, _| USER_LOGIN_KEYS.include?(key) }
39
- others[:'usr.login'] = user_login
40
+ others[:"usr.login"] = user_login
40
41
  track(LOGIN_SUCCESS_EVENT, active_trace, active_span, **others)
41
42
 
42
43
  user_options[:login] = user_login
@@ -60,7 +61,7 @@ module Datadog
60
61
  # event information to attach to the trace.
61
62
  def track_login_failure(trace = nil, span = nil, user_exists:, user_id: nil, **others)
62
63
  set_trace_and_span_context('track_login_failure', trace, span) do |active_trace, active_span|
63
- others[:'usr.login'] = user_id if user_id && !others.key?(:'usr.login') && !others.key?('usr.login')
64
+ others[:"usr.login"] = user_id if user_id && !others.key?(:"usr.login") && !others.key?('usr.login')
64
65
  track(LOGIN_FAILURE_EVENT, active_trace, active_span, **others)
65
66
 
66
67
  active_span.set_tag('appsec.events.users.login.failure.usr.id', user_id) if user_id
@@ -86,12 +87,12 @@ module Datadog
86
87
  set_trace_and_span_context('track_signup', trace, span) do |active_trace, active_span|
87
88
  user_options = user.dup
88
89
  user_id = user_options.delete(:id)
89
- user_login = user_options[:login] || others[:'usr.login'] || others['usr.login'] || user_id
90
+ user_login = user_options[:login] || others[:"usr.login"] || others['usr.login'] || user_id
90
91
 
91
92
  raise ArgumentError, 'missing required key: :user => { :id }' if user_id.nil?
92
93
 
93
94
  others = others.reject { |key, _| USER_LOGIN_KEYS.include?(key) }
94
- others[:'usr.login'] = user_login
95
+ others[:"usr.login"] = user_login
95
96
  track(SIGNUP_EVENT, active_trace, active_span, **others)
96
97
 
97
98
  user_options[:login] = user_login
@@ -126,7 +127,7 @@ module Datadog
126
127
  span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
127
128
  end
128
129
 
129
- trace.keep!
130
+ ::Datadog::AppSec::TraceKeeper.keep!(trace)
130
131
  else
131
132
  set_trace_and_span_context('track', trace, span) do |active_trace, active_span|
132
133
  active_span.set_tag("appsec.events.#{event}.track", 'true')
@@ -138,7 +139,7 @@ module Datadog
138
139
  active_span.set_tag("appsec.events.#{event}.#{k}", v) unless v.nil?
139
140
  end
140
141
 
141
- active_trace.keep!
142
+ ::Datadog::AppSec::TraceKeeper.keep!(active_trace)
142
143
  end
143
144
  end
144
145
 
@@ -154,11 +155,11 @@ module Datadog
154
155
  end
155
156
 
156
157
  trace ||= Datadog::Tracing.active_trace
157
- span ||= trace && trace.active_span || Datadog::Tracing.active_span
158
+ span ||= trace&.active_span || Datadog::Tracing.active_span
158
159
 
159
160
  unless trace && span
160
161
  Datadog.logger.debug(
161
- "Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}"\
162
+ "Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}" \
162
163
  ' to track this events'
163
164
  )
164
165
  return
@@ -43,12 +43,12 @@ module Datadog
43
43
 
44
44
  # enforce types
45
45
 
46
- raise TypeError, ':id must be a String' unless id.is_a?(String)
47
- raise TypeError, ':email must be a String' unless email.nil? || email.is_a?(String)
48
- raise TypeError, ':name must be a String' unless name.nil? || name.is_a?(String)
46
+ raise TypeError, ':id must be a String' unless id.is_a?(String)
47
+ raise TypeError, ':email must be a String' unless email.nil? || email.is_a?(String)
48
+ raise TypeError, ':name must be a String' unless name.nil? || name.is_a?(String)
49
49
  raise TypeError, ':session_id must be a String' unless session_id.nil? || session_id.is_a?(String)
50
- raise TypeError, ':role must be a String' unless role.nil? || role.is_a?(String)
51
- raise TypeError, ':scope must be a String' unless scope.nil? || scope.is_a?(String)
50
+ raise TypeError, ':role must be a String' unless role.nil? || role.is_a?(String)
51
+ raise TypeError, ':scope must be a String' unless scope.nil? || scope.is_a?(String)
52
52
 
53
53
  others.each do |k, v|
54
54
  raise TypeError, "#{k.inspect} must be a String" unless v.nil? || v.is_a?(String)
@@ -57,11 +57,11 @@ module Datadog
57
57
  set_trace_and_span_context('set_user', trace, span) do |_active_trace, active_span|
58
58
  # set tags once data is known consistent
59
59
  active_span.set_tag('usr.id', id)
60
- active_span.set_tag('usr.email', email) unless email.nil?
61
- active_span.set_tag('usr.name', name) unless name.nil?
60
+ active_span.set_tag('usr.email', email) unless email.nil?
61
+ active_span.set_tag('usr.name', name) unless name.nil?
62
62
  active_span.set_tag('usr.session_id', session_id) unless session_id.nil?
63
- active_span.set_tag('usr.role', role) unless role.nil?
64
- active_span.set_tag('usr.scope', scope) unless scope.nil?
63
+ active_span.set_tag('usr.role', role) unless role.nil?
64
+ active_span.set_tag('usr.scope', scope) unless scope.nil?
65
65
 
66
66
  others.each do |k, v|
67
67
  active_span.set_tag("usr.#{k}", v) unless v.nil?
@@ -81,6 +81,9 @@ module Datadog
81
81
 
82
82
  private
83
83
 
84
+ # rubocop:disable Metrics/AbcSize
85
+ # rubocop:disable Metrics/CyclomaticComplexity
86
+ # rubocop:disable Metrics/PerceivedComplexity
84
87
  def set_trace_and_span_context(method, trace = nil, span = nil)
85
88
  if (appsec_context = Datadog::AppSec.active_context)
86
89
  trace = appsec_context.trace
@@ -88,11 +91,11 @@ module Datadog
88
91
  end
89
92
 
90
93
  trace ||= Datadog::Tracing.active_trace
91
- span ||= trace && trace.active_span || Datadog::Tracing.active_span
94
+ span ||= trace&.active_span || Datadog::Tracing.active_span
92
95
 
93
96
  unless trace && span
94
97
  Datadog.logger.debug(
95
- "Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}"\
98
+ "Tracing not enabled. Method ##{method} is a no-op. Please enable tracing if you want ##{method}" \
96
99
  ' to track this events'
97
100
  )
98
101
  return
@@ -102,6 +105,9 @@ module Datadog
102
105
 
103
106
  yield(trace, span)
104
107
  end
108
+ # rubocop:enable Metrics/AbcSize
109
+ # rubocop:enable Metrics/PerceivedComplexity
110
+ # rubocop:enable Metrics/CyclomaticComplexity
105
111
  end
106
112
  end
107
113
  end
@@ -69,7 +69,7 @@ module Datadog
69
69
  def set_value(key, value, metadata: nil, context: ::OpenTelemetry::Context.current)
70
70
  # Delegate to the context to set the value because an active trace is not guaranteed
71
71
  # set_values handles this logic
72
- context.set_values({ ::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY) => { key => value } })
72
+ context.set_values({::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY) => {key => value}})
73
73
  end
74
74
 
75
75
  # Returns a new context with value at key removed
@@ -81,7 +81,7 @@ module Datadog
81
81
  def remove_value(key, context: ::OpenTelemetry::Context.current)
82
82
  # Delegate to the context to remove the value because an active trace is not guaranteed
83
83
  # set_values handles this logic
84
- context.set_values({ Context::BAGGAGE_REMOVE_KEY => key })
84
+ context.set_values({Context::BAGGAGE_REMOVE_KEY => key})
85
85
  end
86
86
  ::OpenTelemetry::Baggage.singleton_class.prepend(self)
87
87
  end
@@ -50,7 +50,8 @@ module Datadog
50
50
  @trace.otel_value(key)
51
51
  end
52
52
 
53
- alias [] value
53
+ # `alias` performed to match {::OpenTelemetry::Context} aliasing upstream
54
+ alias [] value # rubocop:disable Style/Alias
54
55
 
55
56
  # Returns a new Context where entries contains the newly added key and value
56
57
  #
@@ -80,8 +81,8 @@ module Datadog
80
81
  )
81
82
  end
82
83
 
83
- existing_values = @trace && @trace.otel_values || {}
84
- existing_baggage = @trace && @trace.baggage || {}
84
+ existing_values = @trace&.otel_values || {}
85
+ existing_baggage = @trace&.baggage || {}
85
86
 
86
87
  # Retrieve the baggage removal sentinel and remove it from the values hash
87
88
  existing_baggage.delete(values[BAGGAGE_REMOVE_KEY]) if values.key?(BAGGAGE_REMOVE_KEY)
@@ -89,10 +90,10 @@ module Datadog
89
90
  # If the values hash contains a BAGGAGE_KEY, merge its contents with existing baggage
90
91
  # Otherwise, keep the existing baggage unchanged
91
92
  new_baggage = if values.key?(::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY))
92
- existing_baggage.merge(values[::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY)])
93
- else
94
- existing_baggage
95
- end
93
+ existing_baggage.merge(values[::OpenTelemetry::Baggage.const_get(:BAGGAGE_KEY)])
94
+ else
95
+ existing_baggage
96
+ end
96
97
 
97
98
  ::OpenTelemetry::Context.new(existing_values.merge(values), trace: trace, baggage: new_baggage)
98
99
  end
@@ -125,7 +126,7 @@ module Datadog
125
126
  previous_trace = Tracing.active_trace
126
127
  continue_trace!(context)
127
128
 
128
- stack.push(previous_trace && previous_trace.otel_context || ::OpenTelemetry::Context::ROOT)
129
+ stack.push(previous_trace&.otel_context || ::OpenTelemetry::Context::ROOT)
129
130
  stack.size
130
131
  end
131
132
 
@@ -168,7 +169,7 @@ module Datadog
168
169
 
169
170
  def continue_trace!(context, &block)
170
171
  call_context = Tracing.send(:tracer).send(:call_context)
171
- if context && context.trace
172
+ if context&.trace
172
173
  call_context.activate!(context.ensure_trace, &block)
173
174
  else
174
175
  call_context.activate!(nil)
@@ -54,10 +54,10 @@ module Datadog
54
54
  tracestate = Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_tracestate, digest)
55
55
  else
56
56
  trace_flags = if Tracing::Sampling::PrioritySampler.sampled?(digest.trace_sampling_priority)
57
- ::OpenTelemetry::Trace::TraceFlags::SAMPLED
58
- else
59
- ::OpenTelemetry::Trace::TraceFlags::DEFAULT
60
- end
57
+ ::OpenTelemetry::Trace::TraceFlags::SAMPLED
58
+ else
59
+ ::OpenTelemetry::Trace::TraceFlags::DEFAULT
60
+ end
61
61
  tracestate = ::OpenTelemetry::Trace::Tracestate::DEFAULT
62
62
  end
63
63
 
@@ -120,7 +120,7 @@ module Datadog
120
120
  # Some special attributes can override Datadog Span fields
121
121
  def span_arguments(span, attributes)
122
122
  if attributes.key?('analytics.event') && (analytics_event = attributes['analytics.event']).respond_to?(:casecmp)
123
- attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = analytics_event.casecmp('true') == 0 ? 1 : 0
123
+ attributes[Tracing::Metadata::Ext::Analytics::TAG_SAMPLE_RATE] = (analytics_event.casecmp('true') == 0) ? 1 : 0
124
124
  end
125
125
 
126
126
  if attributes.key?('http.response.status_code')
@@ -129,15 +129,15 @@ module Datadog
129
129
 
130
130
  attributes[Tracing::Metadata::Ext::TAG_KIND] = span.kind || 'internal'
131
131
 
132
- kwargs = { start_time: ns_to_time(span.start_timestamp) }
132
+ kwargs = {start_time: ns_to_time(span.start_timestamp)}
133
133
 
134
134
  name = if attributes.key?('operation.name')
135
- attributes['operation.name']
136
- elsif (rich_name = Datadog::OpenTelemetry::Trace::Span.enrich_name(span.kind, attributes))
137
- rich_name.downcase
138
- else
139
- span.kind
140
- end
135
+ attributes['operation.name']
136
+ elsif (rich_name = Datadog::OpenTelemetry::Trace::Span.enrich_name(span.kind, attributes))
137
+ rich_name.downcase
138
+ else
139
+ span.kind
140
+ end
141
141
 
142
142
  kwargs[:resource] = attributes.key?('resource.name') ? attributes['resource.name'] : span.name
143
143
  kwargs[:service] = attributes['service.name'] if attributes.key?('service.name')
@@ -38,8 +38,8 @@ module Datadog
38
38
  res
39
39
  end
40
40
 
41
- # `alias` performed to match {OpenTelemetry::SDK::Trace::Span} aliasing upstream
42
- alias []= set_attribute
41
+ # `alias` performed to match {::OpenTelemetry::SDK::Trace::Span} aliasing upstream
42
+ alias []= set_attribute # rubocop:disable Style/Alias
43
43
 
44
44
  # Attributes are equivalent to span tags and metrics.
45
45
  def add_attributes(attributes)
@@ -72,24 +72,24 @@ module Datadog
72
72
  return 'http.client.request' if kind == :client
73
73
  end
74
74
 
75
- return "#{attrs['db.system']}.query" if attrs.key?('db.system') && kind == :client
75
+ return "#{attrs["db.system"]}.query" if attrs.key?('db.system') && kind == :client
76
76
 
77
77
  if (attrs.key?('messaging.system') || attrs.key?('messaging.operation')) &&
78
78
  [:consumer, :producer, :server, :client].include?(kind)
79
79
 
80
- return "#{attrs['messaging.system']}.#{attrs['messaging.operation']}"
80
+ return "#{attrs["messaging.system"]}.#{attrs["messaging.operation"]}"
81
81
  end
82
82
 
83
83
  if attrs.key?('rpc.system')
84
84
  if attrs['rpc.system'] == 'aws-api' && kind == :client
85
85
  service = attrs['rpc.service']
86
- return "aws.#{service || 'client'}.request"
86
+ return "aws.#{service || "client"}.request"
87
87
  end
88
88
 
89
89
  if kind == :client
90
- return "#{attrs['rpc.system']}.client.request"
90
+ return "#{attrs["rpc.system"]}.client.request"
91
91
  elsif kind == :server
92
- return "#{attrs['rpc.system']}.server.request"
92
+ return "#{attrs["rpc.system"]}.server.request"
93
93
  end
94
94
  end
95
95
 
@@ -99,7 +99,7 @@ module Datadog
99
99
  return "#{provider}.#{name}.invoke"
100
100
  end
101
101
 
102
- return "#{attrs['faas.trigger']}.invoke" if attrs.key?('faas.trigger') && kind == :server
102
+ return "#{attrs["faas.trigger"]}.invoke" if attrs.key?('faas.trigger') && kind == :server
103
103
 
104
104
  return 'graphql.server.request' if attrs.key?('graphql.operation.type')
105
105
 
@@ -119,6 +119,7 @@ module Datadog
119
119
 
120
120
  private
121
121
 
122
+ # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
122
123
  def datadog_set_attribute(key)
123
124
  # Return if attributes are currently disabled by OpenTelemetry.
124
125
  return unless defined?(@attributes) && @attributes
@@ -149,9 +150,11 @@ module Datadog
149
150
  end
150
151
  end
151
152
  end
153
+ # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
152
154
 
153
155
  # Some special attributes can override Datadog Span fields beyond tags and metrics.
154
156
  # @return [Boolean] true if the key is a Datadog Span override attribute, false otherwise
157
+ # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
155
158
  def override_datadog_values(span, key, value)
156
159
  span.name = value if key == 'operation.name'
157
160
  span.resource = value if key == 'resource.name'
@@ -161,15 +164,16 @@ module Datadog
161
164
  if key == 'analytics.event' && value.respond_to?(:casecmp)
162
165
  Datadog::Tracing::Analytics.set_sample_rate(
163
166
  span,
164
- value.casecmp('true') == 0 ? 1 : 0
167
+ (value.casecmp('true') == 0) ? 1 : 0
165
168
  )
166
169
  end
167
170
 
168
171
  span.set_tag('http.status_code', value) if key == 'http.response.status_code'
169
172
  end
173
+ # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
170
174
 
171
175
  DATADOG_SPAN_ATTRIBUTE_OVERRIDES = ['analytics.event', 'operation.name', 'resource.name', 'service.name',
172
- 'span.type', 'http.response.status_code'].freeze
176
+ 'span.type', 'http.response.status_code'].freeze
173
177
 
174
178
  ::OpenTelemetry::SDK::Trace::Span.prepend(self)
175
179
  end
@@ -15,10 +15,10 @@ module Datadog
15
15
  # @return [TraceOperation]
16
16
  def start_trace_copy(trace, parent_span: nil)
17
17
  digest = if parent_span
18
- digest_with_parent_span(trace, parent_span)
19
- else
20
- trace.to_digest
21
- end
18
+ digest_with_parent_span(trace, parent_span)
19
+ else
20
+ trace.to_digest
21
+ end
22
22
 
23
23
  # Create a new TraceOperation, attached to the current Datadog Tracer.
24
24
  Datadog::Tracing.continue_trace!(digest)
@@ -121,15 +121,13 @@ module Datadog
121
121
  end
122
122
 
123
123
  private_class_method def self.try_loading_native_library
124
- begin
125
- require_relative 'profiling/load_native_extension'
124
+ require_relative 'profiling/load_native_extension'
126
125
 
127
- success =
128
- defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
129
- [success, nil]
130
- rescue StandardError, LoadError => e
131
- [false, e]
132
- end
126
+ success =
127
+ defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
128
+ [success, nil]
129
+ rescue StandardError, LoadError => e
130
+ [false, e]
133
131
  end
134
132
 
135
133
  # All requires for the profiler should be directly added here; and everything should be loaded eagerly.
@@ -16,7 +16,7 @@ module Datadog
16
16
  def set_measured(span_op, value = true)
17
17
  return if span_op.nil?
18
18
 
19
- value = value == true || value == 1 ? 1 : 0
19
+ value = (value == true || value == 1) ? 1 : 0
20
20
  span_op.set_metric(Metadata::Ext::Analytics::TAG_MEASURED, value)
21
21
  end
22
22
  end
@@ -54,7 +54,7 @@ module Datadog
54
54
  @buffer_accepted_lengths += trace.length
55
55
 
56
56
  @buffer_spans += trace.length
57
- rescue StandardError => e
57
+ rescue => e
58
58
  Datadog.logger.debug(
59
59
  "Failed to measure queue accept. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
60
60
  )
@@ -64,7 +64,7 @@ module Datadog
64
64
  @buffer_dropped += 1
65
65
 
66
66
  @buffer_spans -= trace.length
67
- rescue StandardError => e
67
+ rescue => e
68
68
  Datadog.logger.debug(
69
69
  "Failed to measure queue drop. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
70
70
  )
@@ -89,7 +89,7 @@ module Datadog
89
89
  @buffer_accepted_lengths = 0
90
90
  @buffer_dropped = 0
91
91
  @buffer_spans = 0
92
- rescue StandardError => e
92
+ rescue => e
93
93
  Datadog.logger.debug(
94
94
  "Failed to measure queue. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
95
95
  )
@@ -121,9 +121,9 @@ module Datadog
121
121
  # TODO We should restructure this module, so that classes are not declared at top-level ::Datadog.
122
122
  # TODO Making such a change is potentially breaking for users manually configuring the tracer.
123
123
  TraceBuffer = if Core::Environment::Ext::RUBY_ENGINE == 'ruby'
124
- CRubyTraceBuffer
125
- else
126
- ThreadSafeTraceBuffer
127
- end
124
+ CRubyTraceBuffer
125
+ else
126
+ ThreadSafeTraceBuffer
127
+ end
128
128
  end
129
129
  end
@@ -24,13 +24,11 @@ module Datadog
24
24
  def call(tracing_header_tags)
25
25
  # Modify the remote configuration value that it matches the
26
26
  # environment variable it configures.
27
- if tracing_header_tags
28
- tracing_header_tags.map! do |hash|
29
- "#{hash['header']}:#{hash['tag_name']}"
30
- end
27
+ tracing_header_tags&.map! do |hash|
28
+ "#{hash["header"]}:#{hash["tag_name"]}"
31
29
  end
32
30
 
33
- super(tracing_header_tags)
31
+ super
34
32
  end
35
33
  end
36
34
 
@@ -80,7 +78,7 @@ module Datadog
80
78
  tracing_sampling_rules = tracing_sampling_rules.to_json
81
79
  end
82
80
 
83
- super(tracing_sampling_rules)
81
+ super
84
82
  Datadog.send(:components).reconfigure_live_sampler
85
83
  end
86
84