class Jaeger::Client::UdpSender

Public Class Methods

new(service_name:, host:, port:, collector:, flush_interval:, logger:) click to toggle source
# File lib/jaeger/client/udp_sender.rb, line 10
def initialize(service_name:, host:, port:, collector:, flush_interval:, logger:)
  @service_name = service_name
  @collector = collector
  @flush_interval = flush_interval
  @logger = logger

  @tags = [
    Jaeger::Thrift::Tag.new(
      'key' => 'jaeger.version',
      'vType' => Jaeger::Thrift::TagType::STRING,
      'vStr' => 'Ruby-' + Jaeger::Client::VERSION
    ),
    Jaeger::Thrift::Tag.new(
      'key' => 'hostname',
      'vType' => Jaeger::Thrift::TagType::STRING,
      'vStr' => Socket.gethostname
    )
  ]
  ipv4 = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }
  unless ipv4.nil?
    @tags << Jaeger::Thrift::Tag.new(
      'key' => 'ip',
      'vType' => Jaeger::Thrift::TagType::STRING,
      'vStr' => ipv4.ip_address
    )
  end

  transport = Transport.new(host, port)
  protocol = ::Thrift::CompactProtocol.new(transport)
  @client = Jaeger::Thrift::Agent::Client.new(protocol)
end

Public Instance Methods

start() click to toggle source
# File lib/jaeger/client/udp_sender.rb, line 42
def start
  # Sending spans in a separate thread to avoid blocking the main thread.
  @thread = Thread.new do
    loop do
      emit_batch(@collector.retrieve)
      sleep @flush_interval
    end
  end
end
stop() click to toggle source
# File lib/jaeger/client/udp_sender.rb, line 52
def stop
  @thread.terminate if @thread
  emit_batch(@collector.retrieve)
end

Private Instance Methods

emit_batch(thrift_spans) click to toggle source
# File lib/jaeger/client/udp_sender.rb, line 59
def emit_batch(thrift_spans)
  return if thrift_spans.empty?

  batch = Jaeger::Thrift::Batch.new(
    'process' => Jaeger::Thrift::Process.new(
      'serviceName' => @service_name,
      'tags' => @tags
    ),
    'spans' => thrift_spans
  )

  @client.emitBatch(batch)
rescue StandardError => error
  log_error(error, batch)
end
log_error(error, failed_batch) click to toggle source
# File lib/jaeger/client/udp_sender.rb, line 75
def log_error(error, failed_batch)
  return unless @logger

  @logger.error("[jaeger-client] Failure while sending batch: #{failed_batch.inspect} with error: #{error}")
end