class Datadog::Transport::IO::Client

Encodes and writes tracer data to IO

Attributes

encoder[R]
out[R]

Public Class Methods

new(out, encoder) click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 15
def initialize(out, encoder)
  @out = out
  @encoder = encoder
end

Public Instance Methods

send_request(request) { |out, request| ... } click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 20
def send_request(request)
  # Write data to IO
  # If block is given, allow it to handle writing
  # Otherwise use default encoding.
  response = if block_given?
               yield(out, request)
             else
               send_default_request(out, request)
             end

  # Update statistics
  update_stats_from_response!(response)

  # Return response
  response
rescue StandardError => e
  message = "Internal error during IO transport request. Cause: #{e.message} Location: #{e.backtrace.first}"

  # Log error
  if stats.consecutive_errors > 0
    Datadog.logger.debug(message)
  else
    Datadog.logger.error(message)
  end

  # Update statistics
  update_stats_from_exception!(e)

  InternalErrorResponse.new(e)
end

Protected Instance Methods

encode_data(encoder, request) click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 53
def encode_data(encoder, request)
  request.parcel.encode_with(encoder)
end
write_data(out, data) click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 57
def write_data(out, data)
  out.puts(data)
end

Private Instance Methods

send_default_request(out, request) click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 63
def send_default_request(out, request)
  # Encode data
  data = encode_data(encoder, request)

  # Write to IO
  result = write_data(out, data)

  # Generate a response
  IO::Response.new(result)
end