Class: OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/opentelemetry/sdk/trace/export/simple_span_processor.rb

Overview

An implementation of the duck type SpanProcessor that converts the Span to ioio.opentelemetryio.opentelemetry.protoio.opentelemetry.proto.traceio.opentelemetry.proto.trace.v1io.opentelemetry.proto.trace.v1.Span and passes it to the configured exporter.

Typically, the SimpleSpanProcessor will be most suitable for use in testing; it should be used with caution in production. It may be appropriate for production use in scenarios where creating multiple threads is not desirable as well as scenarios where different custom attributes should be added to individual spans based on code scopes.

Only spans that are recorded are converted, Trace::Span#is_recording? must return true.

Instance Method Summary collapse

Constructor Details

#initialize(span_exporter) ⇒ SimpleSpanProcessor

Returns a new OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor that converts spans to proto and forwards them to the given span_exporter.

Parameters:

  • span_exporter

    the (duck type) SpanExporter to where the recorded Spans are pushed.

Raises:

  • ArgumentError if the span_exporter is nil.



31
32
33
34
35
# File 'lib/opentelemetry/sdk/trace/export/simple_span_processor.rb', line 31

def initialize(span_exporter)
  raise ArgumentError, "exporter #{span_exporter.inspect} does not appear to be a valid exporter" unless Common::Utilities.valid_exporter?(span_exporter)

  @span_exporter = span_exporter
end

Instance Method Details

#force_flush(timeout: nil) ⇒ Integer

Export all ended spans to the configured Exporter that have not yet been exported, then call Exporter#force_flush.

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)

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



76
77
78
# File 'lib/opentelemetry/sdk/trace/export/simple_span_processor.rb', line 76

def force_flush(timeout: nil)
  @span_exporter&.force_flush(timeout: timeout) || SUCCESS
end

#on_finish(span) ⇒ Object

Called when a Span is ended, if the Span#recording? returns true.

This method is called synchronously on the execution thread, should not throw or block the execution thread.

Parameters:

  • span (Span)

    the Span that just ended.



57
58
59
60
61
62
63
# File 'lib/opentelemetry/sdk/trace/export/simple_span_processor.rb', line 57

def on_finish(span)
  return unless span.context.trace_flags.sampled?

  @span_exporter&.export([span.to_span_data])
rescue => e # rubocop:disable Style/RescueStandardError
  OpenTelemetry.handle_error(exception: e, message: 'unexpected error in span.on_finish')
end

#on_start(span, parent_context) ⇒ Object

Called when a Span is started, if the Span#recording? returns true.

This method is called synchronously on the execution thread, should not throw or block the execution thread.

Parameters:

  • span (Span)

    the Span that just started.

  • parent_context (Context)

    the parent Context of the newly started span.



46
47
48
# File 'lib/opentelemetry/sdk/trace/export/simple_span_processor.rb', line 46

def on_start(span, parent_context)
  # Do nothing.
end

#shutdown(timeout: nil) ⇒ Integer

Called when TracerProvider#shutdown is called.

Parameters:

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

    An optional timeout in seconds.

Returns:

  • (Integer)

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



85
86
87
# File 'lib/opentelemetry/sdk/trace/export/simple_span_processor.rb', line 85

def shutdown(timeout: nil)
  @span_exporter&.shutdown(timeout: timeout) || SUCCESS
end