Class: OpenTelemetry::Exporter::Jaeger::CollectorExporter

Inherits:
Object
  • Object
show all
Defined in:
lib/opentelemetry/exporter/jaeger/collector_exporter.rb

Overview

An OpenTelemetry trace exporter that sends spans over HTTP as Thrift Binary encoded Jaeger spans.

Instance Method Summary collapse

Constructor Details

#initialize(endpoint: ENV.fetch('OTEL_EXPORTER_JAEGER_ENDPOINT', 'http://localhost:14268/api/traces'), username: ENV['OTEL_EXPORTER_JAEGER_USER'], password: ENV['OTEL_EXPORTER_JAEGER_PASSWORD']) ⇒ CollectorExporter

Returns a new instance of CollectorExporter.

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/opentelemetry/exporter/jaeger/collector_exporter.rb', line 18

def initialize(endpoint: ENV.fetch('OTEL_EXPORTER_JAEGER_ENDPOINT', 'http://localhost:14268/api/traces'),
               username: ENV['OTEL_EXPORTER_JAEGER_USER'],
               password: ENV['OTEL_EXPORTER_JAEGER_PASSWORD'])
  raise ArgumentError, "invalid url for Jaeger::CollectorExporter #{endpoint}" if invalid_url?(endpoint)
  raise ArgumentError, 'username and password should either both be nil or both be set' if username.nil? != password.nil?

  @transport = ::Thrift::HTTPClientTransport.new(endpoint)
  unless username.nil? || password.nil?
    authorization = Base64.strict_encode64("#{username}:#{password}")
    auth_header = { 'Authorization': "Basic #{authorization}" }
    @transport.add_headers(auth_header)
  end
  @serializer = ::Thrift::Serializer.new
  @shutdown = false
end

Instance Method Details

#export(span_data, timeout: nil) ⇒ Integer

Called to export sampled SDK::Trace::SpanData structs.

Parameters:

  • span_data (Enumerable<OpenTelemetry::SDK::Trace::SpanData>)

    the list of recorded SDK::Trace::SpanData structs to be exported.

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

    An optional timeout in seconds.

Returns:

  • (Integer)

    the result of the export.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/opentelemetry/exporter/jaeger/collector_exporter.rb', line 41

def export(span_data, timeout: nil)
  return FAILURE if @shutdown

  encoded_batches(span_data).each do |batch|
    @transport.write(@serializer.serialize(batch))
  end

  OpenTelemetry::Common::Utilities.untraced do
    @transport.flush
  end
  SUCCESS
rescue StandardError => e
  OpenTelemetry.handle_error(exception: e, message: 'unexpected error in Jaeger::CollectorExporter#export')
  FAILURE
end

#force_flush(timeout: nil) ⇒ Object

Called when SDK::Trace::TracerProvider#force_flush is called, if this exporter is registered to a SDK::Trace::TracerProvider object.

Parameters:

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

    An optional timeout in seconds.



62
63
64
# File 'lib/opentelemetry/exporter/jaeger/collector_exporter.rb', line 62

def force_flush(timeout: nil)
  SUCCESS
end

#shutdown(timeout: nil) ⇒ Object

Called when SDK::Trace::TracerProvider#shutdown is called, if this exporter is registered to a SDK::Trace::TracerProvider object.

Parameters:

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

    An optional timeout in seconds.



71
72
73
74
# File 'lib/opentelemetry/exporter/jaeger/collector_exporter.rb', line 71

def shutdown(timeout: nil)
  @shutdown = true
  SUCCESS
end