Class: Couchbase::OpenTelemetry::RequestTracer

Inherits:
Tracing::RequestTracer
  • Object
show all
Defined in:
lib/couchbase/opentelemetry/request_tracer.rb

Instance Method Summary collapse

Constructor Details

#initialize(tracer_provider) ⇒ RequestTracer

Initializes a Couchbase OpenTelemetry Request Tracer

Examples:

Initializing a Couchbase OpenTelemetry Request Tracer with an OTLP Exporter

require "opentelemetry-sdk"

# Initialize a tracer provider
tracer_provider = ::OpenTelemetry::SDK::Trace::TracerProvider.new
tracer_provider.add_span_processor(
    ::OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
        exporter: ::OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: "https://<hostname>:<port>/v1/traces"
       )
    )
)
# Initialize the Couchbase OpenTelemetry Request Tracer
tracer = Couchbase::OpenTelemetry::RequestTracer.new(tracer_provider)

# Set the tracer in the cluster options
options = Couchbase::Options::Cluster.new(
   authenticator: Couchbase::PasswordAuthenticator.new("Administrator", "password")
   tracer: tracer
)

Parameters:

  • tracer_provider (::OpenTelemetry::Trace::TracerProvider)

    The OpenTelemetry tracer provider

Raises:

  • (Couchbase::Error::TracerError)

    if the tracer cannot be created for any reason

See Also:



55
56
57
58
59
60
61
62
# File 'lib/couchbase/opentelemetry/request_tracer.rb', line 55

def initialize(tracer_provider)
  super()
  begin
    @wrapped = tracer_provider.tracer("com.couchbase.client/ruby")
  rescue StandardError => e
    raise Error::TracerError.new("Failed to create OpenTelemetry tracer: #{e.message}", nil, e)
  end
end

Instance Method Details

#request_span(name, parent: nil, start_timestamp: nil) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/couchbase/opentelemetry/request_tracer.rb', line 64

def request_span(name, parent: nil, start_timestamp: nil)
  parent_context = parent.nil? ? nil : ::OpenTelemetry::Trace.context_with_span(parent.instance_variable_get(:@wrapped))
  RequestSpan.new(
    @wrapped.start_span(
      name,
      with_parent: parent_context,
      start_timestamp: start_timestamp,
      kind: :client,
    ),
  )
rescue StandardError => e
  raise Error::TracerError.new("Failed to create OpenTelemetry span: #{e.message}", nil, e)
end