Sha256: 340f61eeb8f81b7e62310f687f698d2dd7679f7b191e66be02a7a1f844db5623

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

# typed: true

module Datadog
  module OpenTracer
    # OpenTracing adapter for thread local scope management
    # @public_api
    class ThreadLocalScopeManager < ScopeManager
      # Make a span instance active.
      #
      # @param span [Span] the Span that should become active
      # @param finish_on_close [Boolean] whether the Span should automatically be
      #   finished when Scope#close is called
      # @return [Scope] instance to control the end of the active period for the
      #  Span. It is a programming error to neglect to call Scope#close on the
      #  returned instance.
      def activate(span, finish_on_close: true)
        ThreadLocalScope.new(
          manager: self,
          span: span,
          finish_on_close: finish_on_close
        ).tap do |scope|
          set_scope(scope)
        end
      end

      # @return [Scope] the currently active Scope which can be used to access the
      # currently active Span.
      #
      # If there is a non-null Scope, its wrapped Span becomes an implicit parent
      # (as Reference#CHILD_OF) of any newly-created Span at Tracer#start_active_span
      # or Tracer#start_span time.
      def active
        Thread.current[object_id.to_s]
      end

      private

      def set_scope(scope)
        Thread.current[object_id.to_s] = scope
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ddtrace-1.1.0 lib/datadog/opentracer/thread_local_scope_manager.rb
ddtrace-1.0.0 lib/datadog/opentracer/thread_local_scope_manager.rb
ddtrace-1.0.0.beta2 lib/datadog/opentracer/thread_local_scope_manager.rb