From 84d64caa1feb269542952fd766c0552bf805c78c Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 8 May 2024 14:13:43 -0500 Subject: [PATCH] feat: add untraced ctx method (#1634) * feat: Support non block structured untraced context --- common/.rubocop.yml | 2 ++ common/lib/opentelemetry/common/utilities.rb | 15 +++++++++++---- .../test/opentelemetry/common/utilities_test.rb | 7 +++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/common/.rubocop.yml b/common/.rubocop.yml index 94649e0bec..db98871e84 100644 --- a/common/.rubocop.yml +++ b/common/.rubocop.yml @@ -6,6 +6,8 @@ Bundler/OrderedGems: Style/FrozenStringLiteralComment: Exclude: - gemfiles/**/* +Style/ExplicitBlockArgument: + Enabled: false Style/StringLiterals: Exclude: - gemfiles/**/* diff --git a/common/lib/opentelemetry/common/utilities.rb b/common/lib/opentelemetry/common/utilities.rb index eee275f253..d13e251ff8 100644 --- a/common/lib/opentelemetry/common/utilities.rb +++ b/common/lib/opentelemetry/common/utilities.rb @@ -88,10 +88,17 @@ def truncate_attribute_value(value, limit) end end - # Disables tracing within the provided block. - def untraced - Context.with_value(UNTRACED_KEY, true) do |ctx, _| - yield ctx + # Disables tracing within the provided block + # If no block is provided instead returns an + # untraced ctx. + # + # @param [optional Context] context Accepts an explicit context, defaults to current + def untraced(context = Context.current) + context = context.set_value(UNTRACED_KEY, true) + if block_given? + Context.with_current(context) { |ctx| yield ctx } + else + context end end diff --git a/common/test/opentelemetry/common/utilities_test.rb b/common/test/opentelemetry/common/utilities_test.rb index f931242fd8..555b87121d 100644 --- a/common/test/opentelemetry/common/utilities_test.rb +++ b/common/test/opentelemetry/common/utilities_test.rb @@ -26,6 +26,13 @@ def shutdown(timeout: nil); end common_utils.untraced {} assert_equal(false, common_utils.untraced?) end + + it 'supports non block format' do + token = OpenTelemetry::Context.attach(common_utils.untraced) + assert_equal(true, common_utils.untraced?) + OpenTelemetry::Context.detach(token) + assert_equal(false, common_utils.untraced?) + end end describe '#utf8_encode' do