diff --git a/config/sus.rb b/config/sus.rb index 66ee738..655abec 100644 --- a/config/sus.rb +++ b/config/sus.rb @@ -7,3 +7,6 @@ require "covered/sus" include Covered::Sus + +require "opentelemetry/sdk" +OpenTelemetry::SDK.configure diff --git a/lib/traces/backend/open_telemetry/interface.rb b/lib/traces/backend/open_telemetry/interface.rb index bc8b4bd..bb6d587 100644 --- a/lib/traces/backend/open_telemetry/interface.rb +++ b/lib/traces/backend/open_telemetry/interface.rb @@ -17,21 +17,7 @@ module OpenTelemetry module Interface def trace(name, attributes: nil, &block) - span = TRACER.start_span(name, attributes: attributes&.transform_keys(&:to_s)) - - begin - if block.arity.zero? - yield - else - yield span - end - rescue Exception => error - span&.record_exception(error) - span&.status = ::OpenTelemetry::Trace::Status.error("Unhandled exception of type: #{error.class}") - raise - ensure - span&.finish - end + TRACER.in_span(name, attributes: attributes&.transform_keys(&:to_s), &block) end def trace_context=(context) @@ -44,8 +30,8 @@ def trace_context=(context) ) span = ::OpenTelemetry::Trace.non_recording_span(span_context) - - return ::OpenTelemetry::Trace.context_with_span(span) + context = ::OpenTelemetry::Trace.context_with_span(span) + ::OpenTelemetry::Context.attach(context) end def trace_context(span = ::OpenTelemetry::Trace.current_span) diff --git a/test/traces/backend/open_telemetry.rb b/test/traces/backend/open_telemetry.rb index f9167a6..142ddcd 100644 --- a/test/traces/backend/open_telemetry.rb +++ b/test/traces/backend/open_telemetry.rb @@ -101,9 +101,9 @@ def my_span_and_context ) # It seems like OpenTelemetry doesn't really do anything in the testing environment, so we can't really check the parent_id? - # expect(span).to have_attributes( - # parent_id: be == context.parent_id - # ) + expect(span).to have_attributes( + parent_span_id: be == context.parent_id + ) end end end