From fb26faee3d84e4f519a0fd2cd0d69fad86eacd58 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 20 Nov 2024 16:46:49 +0100 Subject: [PATCH] fix loaded? definitions for integrations; do not patch already patched integrations --- lib/datadog/ci/contrib/cucumber/integration.rb | 2 +- lib/datadog/ci/contrib/instrumentation.rb | 1 + lib/datadog/ci/contrib/integration.rb | 10 ++++++---- lib/datadog/ci/contrib/minitest/integration.rb | 3 ++- lib/datadog/ci/contrib/rspec/integration.rb | 4 +++- sig/datadog/ci/contrib/integration.rbs | 4 +++- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/datadog/ci/contrib/cucumber/integration.rb b/lib/datadog/ci/contrib/cucumber/integration.rb index 02d9b182..73384623 100644 --- a/lib/datadog/ci/contrib/cucumber/integration.rb +++ b/lib/datadog/ci/contrib/cucumber/integration.rb @@ -17,7 +17,7 @@ def version end def loaded? - !defined?(::Cucumber).nil? && !defined?(::Cucumber::Runtime).nil? + !defined?(::Cucumber).nil? && !defined?(::Cucumber::Runtime).nil? && !defined?(::Cucumber::Configuration).nil? end def compatible? diff --git a/lib/datadog/ci/contrib/instrumentation.rb b/lib/datadog/ci/contrib/instrumentation.rb index b4564913..9811ac8e 100644 --- a/lib/datadog/ci/contrib/instrumentation.rb +++ b/lib/datadog/ci/contrib/instrumentation.rb @@ -46,6 +46,7 @@ def self.auto_instrument script_compiled_tracepoint = TracePoint.new(:script_compiled) do auto_instrumented_integrations.each do |integration| + next if integration.patched? next unless integration.loaded? Datadog.logger.debug("#{integration.class} is loaded") diff --git a/lib/datadog/ci/contrib/integration.rb b/lib/datadog/ci/contrib/integration.rb index 8bb09dd5..494284ba 100644 --- a/lib/datadog/ci/contrib/integration.rb +++ b/lib/datadog/ci/contrib/integration.rb @@ -93,9 +93,7 @@ def patcher # @!visibility private def patch - # @type var patcher_klass: untyped - patcher_klass = patcher - if !patchable? || patcher_klass.nil? + if !patchable? || patcher.nil? return { ok: false, available: available?, @@ -105,10 +103,14 @@ def patch } end - patcher_klass.patch + patcher.patch {ok: true} end + def patched? + patcher&.patched? + end + # Can the patch for this integration be applied automatically? # @return [Boolean] can the tracer activate this instrumentation without explicit user input? def late_instrument? diff --git a/lib/datadog/ci/contrib/minitest/integration.rb b/lib/datadog/ci/contrib/minitest/integration.rb index 9a9f84ed..c766a42b 100644 --- a/lib/datadog/ci/contrib/minitest/integration.rb +++ b/lib/datadog/ci/contrib/minitest/integration.rb @@ -17,7 +17,8 @@ def version end def loaded? - !defined?(::Minitest).nil? + !defined?(::Minitest).nil? && !defined?(::Minitest::Runnable).nil? && !defined?(::Minitest::Test).nil? && + !defined?(::Minitest::CompositeReporter).nil? end def compatible? diff --git a/lib/datadog/ci/contrib/rspec/integration.rb b/lib/datadog/ci/contrib/rspec/integration.rb index 6483c73d..9b3c03ab 100644 --- a/lib/datadog/ci/contrib/rspec/integration.rb +++ b/lib/datadog/ci/contrib/rspec/integration.rb @@ -22,7 +22,9 @@ def version def loaded? !defined?(::RSpec).nil? && !defined?(::RSpec::Core).nil? && - !defined?(::RSpec::Core::Example).nil? + !defined?(::RSpec::Core::Example).nil? && + !defined?(::RSpec::Core::Runner).nil? && + !defined?(::RSpec::Core::ExampleGroup).nil? end def compatible? diff --git a/sig/datadog/ci/contrib/integration.rbs b/sig/datadog/ci/contrib/integration.rbs index a5f6fbac..4c5d9edb 100644 --- a/sig/datadog/ci/contrib/integration.rbs +++ b/sig/datadog/ci/contrib/integration.rbs @@ -20,7 +20,9 @@ module Datadog def enabled: () -> bool - def patcher: () -> Datadog::Tracing::Contrib::Patcher? + def patcher: () -> untyped + + def patched?: () -> bool? def patch: () -> Hash[Symbol, bool]