diff --git a/instrumentation/base/lib/opentelemetry/instrumentation/base.rb b/instrumentation/base/lib/opentelemetry/instrumentation/base.rb index 9dd36d95e6..681d0bd83e 100644 --- a/instrumentation/base/lib/opentelemetry/instrumentation/base.rb +++ b/instrumentation/base/lib/opentelemetry/instrumentation/base.rb @@ -201,9 +201,9 @@ def initialize(name, version, install_blk, present_blk, @install_blk = install_blk @present_blk = present_blk @compatible_blk = compatible_blk - @config = {} - @installed = false @options = options + @config = config_options({}) + @installed = false @tracer = OpenTelemetry::Trace::Tracer.new end # rubocop:enable Metrics/ParameterLists diff --git a/instrumentation/base/test/instrumentation/base_test.rb b/instrumentation/base/test/instrumentation/base_test.rb index ef11119777..4893c947d0 100644 --- a/instrumentation/base/test/instrumentation/base_test.rb +++ b/instrumentation/base/test/instrumentation/base_test.rb @@ -345,6 +345,15 @@ def initialize(*args) end end + describe '#config' do + describe 'before install' do + it 'returns default values for defined options' do + instance = instrumentation_with_callbacks.instance + _(instance.config[:max_count]).must_equal(5) + end + end + end + describe '#enabled?' do describe 'with env var' do it 'is disabled when false' do diff --git a/instrumentation/grpc/lib/opentelemetry/instrumentation/grpc/interceptors/client_tracer.rb b/instrumentation/grpc/lib/opentelemetry/instrumentation/grpc/interceptors/client_tracer.rb index 364dbe2637..5c1139e212 100644 --- a/instrumentation/grpc/lib/opentelemetry/instrumentation/grpc/interceptors/client_tracer.rb +++ b/instrumentation/grpc/lib/opentelemetry/instrumentation/grpc/interceptors/client_tracer.rb @@ -29,7 +29,7 @@ def bidi_streamer(requests: nil, call: nil, method: nil, metadata: nil, &) private def call(type:, requests: nil, call: nil, method: nil, metadata: nil) - return yield if instrumentation_config.empty? + return yield unless Grpc::Instrumentation.instance.installed? method_parts = method.to_s.split('/') service = method_parts[1] diff --git a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb index 2e86226e44..7c5d7a535e 100644 --- a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb +++ b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/client.rb @@ -10,7 +10,7 @@ module Gruf module Interceptors class Client < ::Gruf::Interceptors::ClientInterceptor def call(request_context:) - return yield if instrumentation_config.empty? + return yield unless Gruf::Instrumentation.instance.installed? service = request_context.method.split('/')[1] method = request_context.method_name diff --git a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb index 231a5f4a42..eedd4c2456 100644 --- a/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb +++ b/instrumentation/gruf/lib/opentelemetry/instrumentation/gruf/interceptors/server.rb @@ -10,7 +10,7 @@ module Gruf module Interceptors class Server < ::Gruf::Interceptors::ServerInterceptor def call - return yield if instrumentation_config.empty? + return yield unless Gruf::Instrumentation.instance.installed? method = request.method_name diff --git a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/dup/tracer_middleware_test.rb b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/dup/tracer_middleware_test.rb index bca2c0683f..fa1023ee9e 100644 --- a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/dup/tracer_middleware_test.rb +++ b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/dup/tracer_middleware_test.rb @@ -415,4 +415,20 @@ class SimulatedError < StandardError _(first_span.status.code).must_equal OpenTelemetry::Trace::Status::ERROR end end + + describe 'when SDK is disabled' do + let(:disabled_rack_builder) { Rack::Builder.new } + + before do + instrumentation.instance_variable_set(:@installed, false) + described_class.send(:clear_cached_config) + disabled_rack_builder.run app + disabled_rack_builder.use described_class + end + + it 'handles requests without raising an error' do + response = Rack::MockRequest.new(disabled_rack_builder).get('/ping', env) + _(response.status).must_equal 200 + end + end end diff --git a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/old/tracer_middleware_test.rb b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/old/tracer_middleware_test.rb index c1e2b2423a..3da44b83d5 100644 --- a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/old/tracer_middleware_test.rb +++ b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/old/tracer_middleware_test.rb @@ -387,4 +387,20 @@ class SimulatedError < StandardError _(first_span.status.code).must_equal OpenTelemetry::Trace::Status::ERROR end end + + describe 'when SDK is disabled' do + let(:disabled_rack_builder) { Rack::Builder.new } + + before do + instrumentation.instance_variable_set(:@installed, false) + described_class.send(:clear_cached_config) + disabled_rack_builder.run app + disabled_rack_builder.use described_class + end + + it 'handles requests without raising an error' do + response = Rack::MockRequest.new(disabled_rack_builder).get('/ping', env) + _(response.status).must_equal 200 + end + end end diff --git a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/stable/tracer_middleware_test.rb b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/stable/tracer_middleware_test.rb index 8691b43e9d..f90ad8e6eb 100644 --- a/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/stable/tracer_middleware_test.rb +++ b/instrumentation/rack/test/opentelemetry/instrumentation/rack/middlewares/stable/tracer_middleware_test.rb @@ -386,4 +386,20 @@ class SimulatedError < StandardError _(first_span.status.code).must_equal OpenTelemetry::Trace::Status::ERROR end end + + describe 'when SDK is disabled' do + let(:disabled_rack_builder) { Rack::Builder.new } + + before do + instrumentation.instance_variable_set(:@installed, false) + described_class.send(:clear_cached_config) + disabled_rack_builder.run app + disabled_rack_builder.use described_class + end + + it 'handles requests without raising an error' do + response = Rack::MockRequest.new(disabled_rack_builder).get('/ping', env) + _(response.status).must_equal 200 + end + end end