class Datadog::Transport::IO::Client
Encodes and writes tracer data to IO
Attributes
encoder[R]
out[R]
Public Class Methods
new(out, encoder, options = {})
click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 16 def initialize(out, encoder, options = {}) @out = out @encoder = encoder @request_block = options.fetch(:request, method(:send_default_request)) @encode_block = options.fetch(:encode, method(:encode_data)) @write_block = options.fetch(:write, method(:write_data)) @response_block = options.fetch(:response, method(:build_response)) end
Public Instance Methods
build_response(_request, _data, result)
click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 65 def build_response(_request, _data, result) IO::Response.new(result) end
encode_data(encoder, request)
click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 57 def encode_data(encoder, request) request.parcel.encode_with(encoder) end
send_request(request) { |out, request| ... }
click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 26 def send_request(request) # Write data to IO # If block is given, allow it to handle writing # Otherwise do a standard encode/write/response. response = if block_given? yield(out, request) else @request_block.call(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: #{Array(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
write_data(out, data)
click to toggle source
# File lib/ddtrace/transport/io/client.rb, line 61 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 71 def send_default_request(out, request) # Encode data data = @encode_block.call(encoder, request) # Write to IO result = @write_block.call(out, data) # Generate a response @response_block.call(request, data, result) end