class Uptrace::Client

Uptrace client that configures OpenTelemetry SDK to use Uptrace exporter.

Public Class Methods

new(dsn: '') click to toggle source

@param [string] dsn

# File lib/uptrace/client.rb, line 9
def initialize(dsn: '')
  dsn = ENV.fetch('UPTRACE_DSN', '') if dsn.empty?

  begin
    @dsn = DSN.new(dsn)
  rescue ArgumentError => e
    Uptrace.logger.error("Uptrace is disabled: #{e.message}")
    @disabled = true

    @dsn = DSN.new('https://TOKEN@api.uptrace.dev/PROJECT_ID')
  end
end

Public Instance Methods

disabled?() click to toggle source
# File lib/uptrace/client.rb, line 22
def disabled?
  @disabled
end
span_processor() click to toggle source

@return [OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor]

# File lib/uptrace/client.rb, line 37
def span_processor
  exp = Uptrace::Trace::Exporter.new(@dsn)
  OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
    exp,
    max_queue_size: 1000,
    max_export_batch_size: 1000,
    schedule_delay: 5_000
  )
end
trace_url(span = nil) click to toggle source

@param [optional OpenTelemetry::Trace::Span] span @return [String]

# File lib/uptrace/client.rb, line 28
def trace_url(span = nil)
  span = OpenTelemetry::Trace.current_span if span.nil?

  host = @dsn.host.delete_prefix('api.')
  trace_id = span.context.hex_trace_id
  "#{@dsn.scheme}://#{host}/search/#{@dsn.project_id}?q=#{trace_id}"
end