diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index ca95277508c..93d7206858a 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -38,6 +38,7 @@ Metrics/BlockNesting: # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS Naming/FileName: Exclude: + - 'lib/datadog/single_step_instrument.rb' - 'lib/datadog/appsec/autoload.rb' - 'lib/datadog/opentelemetry/api/trace/span.rb' - 'lib/datadog/opentelemetry/sdk/trace/span.rb' diff --git a/lib-injection/host_inject.rb b/lib-injection/host_inject.rb index 8baf5e18293..6583f8c4536 100644 --- a/lib-injection/host_inject.rb +++ b/lib-injection/host_inject.rb @@ -197,7 +197,7 @@ def bundler_supported? bundle_add_cmd = "bundle add #{gem} --skip-install --version #{gem_version_mapping[gem]} " bundle_add_cmd << ' --verbose ' if ENV['DD_TRACE_DEBUG'] == 'true' - bundle_add_cmd << '--require datadog/auto_instrument' if gem == 'datadog' + bundle_add_cmd << '--require datadog/single_step_instrument' if gem == 'datadog' utils.debug "Injection with `#{bundle_add_cmd}`" diff --git a/lib/datadog/single_step_instrument.rb b/lib/datadog/single_step_instrument.rb new file mode 100644 index 00000000000..91d75e1bc43 --- /dev/null +++ b/lib/datadog/single_step_instrument.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# +# Entrypoint file for single step instrumentation. +# +# This file's path is private. Do not reference this file. +# +begin + require_relative 'auto_instrument' +rescue StandardError, LoadError => e + warn "Single step instrumentation failed: #{e.class}:#{e.message}\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}" +end diff --git a/sig/datadog/single_step_instrument.rbs b/sig/datadog/single_step_instrument.rbs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/spec/datadog/single_step_instrument_spec.rb b/spec/datadog/single_step_instrument_spec.rb new file mode 100644 index 00000000000..f4249f919b8 --- /dev/null +++ b/spec/datadog/single_step_instrument_spec.rb @@ -0,0 +1,23 @@ +RSpec.describe 'Single step instrument', skip: !Process.respond_to?(:fork) do + it do + expect_in_fork do + expect_any_instance_of(Object) + .to receive(:require_relative).with('auto_instrument').and_raise(LoadError) + + expect do + load 'datadog/single_step_instrument.rb' + end.to output(/Single step instrumentation failed/).to_stderr + end + end + + it do + expect_in_fork do + expect_any_instance_of(Object) + .to receive(:require_relative).with('auto_instrument').and_raise(StandardError) + + expect do + load 'datadog/single_step_instrument.rb' + end.to output(/Single step instrumentation failed/).to_stderr + end + end +end