lib/opentelemetry/trace/tracer.rb in opentelemetry-api-0.6.0 vs lib/opentelemetry/trace/tracer.rb in opentelemetry-api-0.7.0

- old
+ new

@@ -6,37 +6,30 @@ module OpenTelemetry module Trace # No-op implementation of Tracer. class Tracer - EXTRACTED_SPAN_CONTEXT_KEY = Propagation::ContextKeys.extracted_span_context_key CURRENT_SPAN_KEY = Propagation::ContextKeys.current_span_key - private_constant :EXTRACTED_SPAN_CONTEXT_KEY, :CURRENT_SPAN_KEY + private_constant :CURRENT_SPAN_KEY # Returns the current span from the current or provided context # # @param [optional Context] context The context to lookup the current # {Span} from. Defaults to Context.current - def current_span(context = Context.current) + def current_span(context = nil) + context ||= Context.current context.value(CURRENT_SPAN_KEY) || Span::INVALID end - # Returns the the active span context from the given {Context}, or current - # if one is not explicitly passed in. The active span context may refer to - # a {SpanContext} that has been extracted. If both a current {Span} and an - # extracted, {SpanContext} exist, the context of the current {Span} will be - # returned. + # Returns a context containing the span, derived from the optional parent + # context, or the current context if one was not provided. # - # @param [optional Context] context The context to lookup the active - # {SpanContext} from. - # - def active_span_context(context = nil) - context ||= Context.current - context.value(CURRENT_SPAN_KEY)&.context || - context.value(EXTRACTED_SPAN_CONTEXT_KEY) || - SpanContext::INVALID + # @param [optional Context] context The context to use as the parent for + # the returned context + def context_with_span(span, parent_context: Context.current) + parent_context.set_value(CURRENT_SPAN_KEY, span) end # This is a helper for the default use-case of extending the current trace with a span. # # With this helper: @@ -50,20 +43,21 @@ # On exit, the Span that was active before calling this method will be reactivated. If an # exception occurs during the execution of the provided block, it will be recorded on the # span and reraised. # @yield [span, context] yields the newly created span and a context containing the # span to the block. - def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil, with_parent: nil, with_parent_context: nil) - span = start_span(name, attributes: attributes, links: links, start_timestamp: start_timestamp, kind: kind, with_parent: with_parent, with_parent_context: with_parent_context) + def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil, with_parent: nil) + span = nil + span = start_span(name, attributes: attributes, links: links, start_timestamp: start_timestamp, kind: kind, with_parent: with_parent) with_span(span) { |s, c| yield s, c } rescue Exception => e # rubocop:disable Lint/RescueException - span.record_exception(e) - span.status = Status.new(Status::UNKNOWN_ERROR, - description: "Unhandled exception of type: #{e.class}") + span&.record_exception(e) + span&.status = Status.new(Status::ERROR, + description: "Unhandled exception of type: #{e.class}") raise e ensure - span.finish + span&.finish end # Activates/deactivates the Span within the current Context, which makes the "current span" # available implicitly. # @@ -82,17 +76,15 @@ # Used when a caller wants to manage the activation/deactivation and lifecycle of # the Span and its parent manually. # # Parent context can be either passed explicitly, or inferred from currently activated span. # - # @param [optional Span] with_parent Explicitly managed parent Span, overrides - # +with_parent_context+. - # @param [optional Context] with_parent_context Explicitly managed. Overridden by - # +with_parent+. + # @param [optional Context] with_parent Explicitly managed parent context # # @return [Span] - def start_span(name, with_parent: nil, with_parent_context: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil) - span_context = with_parent&.context || active_span_context(with_parent_context) + def start_span(name, with_parent: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil) + span_context = current_span(with_parent).context + if span_context.valid? Span.new(span_context: span_context) else Span.new end