Class: OpenTelemetry::SDK::Trace::TracerProvider

Inherits:
Trace::TracerProvider
  • Object
show all
Defined in:
lib/opentelemetry/sdk/trace/tracer_provider.rb

Overview

TracerProvider is the SDK implementation of Trace::TracerProvider.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource = OpenTelemetry::SDK::Resources::Resource.create) ⇒ TracerProvider



22
23
24
25
26
27
28
29
30
31
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 22

def initialize(resource = OpenTelemetry::SDK::Resources::Resource.create)
  @mutex = Mutex.new
  @registry = {}
  @active_span_processor = NoopSpanProcessor.instance
  @active_trace_config = Config::TraceConfig::DEFAULT
  @id_generator = OpenTelemetry::Trace
  @registered_span_processors = []
  @stopped = false
  @resource = resource
end

Instance Attribute Details

#active_span_processorObject (readonly)

Returns the value of attribute active_span_processor.



16
17
18
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 16

def active_span_processor
  @active_span_processor
end

#active_trace_configObject

Returns the value of attribute active_trace_config.



15
16
17
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 15

def active_trace_config
  @active_trace_config
end

#id_generatorObject

Returns the value of attribute id_generator.



15
16
17
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 15

def id_generator
  @id_generator
end

#resourceObject (readonly)

Returns the value of attribute resource.



16
17
18
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 16

def resource
  @resource
end

#stoppedObject (readonly) Also known as: stopped?

Returns the value of attribute stopped.



16
17
18
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 16

def stopped
  @stopped
end

Instance Method Details

#add_span_processor(span_processor) ⇒ Object

Adds a new SpanProcessor to this OpenTelemetry::SDK::Trace::Tracer.

Parameters:

  • span_processor

    the new SpanProcessor to be added.



88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 88

def add_span_processor(span_processor)
  @mutex.synchronize do
    if @stopped
      OpenTelemetry.logger.warn('calling Tracer#add_span_processor after shutdown.')
      return
    end
    @registered_span_processors << span_processor
    @active_span_processor = if @registered_span_processors.size == 1
                               span_processor
                             else
                               MultiSpanProcessor.new(@registered_span_processors.dup)
                             end
  end
end

#force_flush(timeout: nil) ⇒ Integer

Immediately export all spans that have not yet been exported for all the registered SpanProcessors.

This method should only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the Processor exports the completed spans.

Parameters:

  • timeout (optional Numeric) (defaults to: nil)

    An optional timeout in seconds.

Returns:

  • (Integer)

    Export::SUCCESS if no error occurred, Export::FAILURE if a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.



77
78
79
80
81
82
83
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 77

def force_flush(timeout: nil)
  @mutex.synchronize do
    return Export::SUCCESS if @stopped

    @active_span_processor.force_flush(timeout: timeout)
  end
end

#shutdown(timeout: nil) ⇒ Object

Attempts to stop all the activity for this OpenTelemetry::SDK::Trace::TracerProvider. Calls SpanProcessor#shutdown for all registered SpanProcessors.

This operation may block until all the Spans are processed. Must be called before turning off the main application to ensure all data are processed and exported.

After this is called all the newly created Spans will be no-op.

Parameters:

  • timeout (optional Numeric) (defaults to: nil)

    An optional timeout in seconds.



55
56
57
58
59
60
61
62
63
64
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 55

def shutdown(timeout: nil)
  @mutex.synchronize do
    if @stopped
      OpenTelemetry.logger.warn('calling Tracer#shutdown multiple times.')
      return
    end
    @active_span_processor.shutdown(timeout: timeout)
    @stopped = true
  end
end

#tracer(name = nil, version = nil) ⇒ Tracer

Returns a OpenTelemetry::SDK::Trace::Tracer instance.

Parameters:

  • name (optional String) (defaults to: nil)

    Instrumentation package name

  • version (optional String) (defaults to: nil)

    Instrumentation package version

Returns:



39
40
41
42
43
# File 'lib/opentelemetry/sdk/trace/tracer_provider.rb', line 39

def tracer(name = nil, version = nil)
  name ||= ''
  version ||= ''
  @mutex.synchronize { @registry[Key.new(name, version)] ||= Tracer.new(name, version, self) }
end