class Datadog::Transport::Traces::Transport
Sends traces based on transport API configuration.
This class initializes the HTTP
client, breaks down large batches of traces into smaller chunks and handles API version downgrade handshake.
Attributes
apis[R]
client[R]
current_api_id[R]
default_api[R]
Public Class Methods
new(apis, default_api)
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 101 def initialize(apis, default_api) @apis = apis @default_api = default_api change_api!(default_api) end
Public Instance Methods
current_api()
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 132 def current_api apis[@current_api_id] end
send_traces(traces)
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 108 def send_traces(traces) encoder = current_api.encoder chunker = Datadog::Transport::Traces::Chunker.new(encoder) responses = chunker.encode_in_chunks(traces.lazy).map do |encoded_traces, trace_count| request = Request.new(EncodedParcel.new(encoded_traces, trace_count)) client.send_payload(request).tap do |response| if downgrade?(response) downgrade! return send_traces(traces) end end end.force Datadog.health_metrics.transport_chunked(responses.size) responses end
stats()
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 128 def stats @client.stats end
Private Instance Methods
change_api!(api_id)
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 149 def change_api!(api_id) raise UnknownApiVersionError, api_id unless apis.key?(api_id) @current_api_id = api_id @client = HTTP::Client.new(current_api) end
downgrade!()
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 143 def downgrade! downgrade_api_id = apis.fallbacks[@current_api_id] raise NoDowngradeAvailableError, @current_api_id if downgrade_api_id.nil? change_api!(downgrade_api_id) end
downgrade?(response)
click to toggle source
# File lib/ddtrace/transport/traces.rb, line 138 def downgrade?(response) return false unless apis.fallbacks.key?(@current_api_id) response.not_found? || response.unsupported? end