class Datadog::Workers::TraceWriter

Writes traces to transport synchronously

Attributes

transport[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 17
def initialize(options = {})
  transport_options = options.fetch(:transport_options, {})

  transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)

  @transport = options.fetch(:transport) do
    Transport::HTTP.default(**transport_options)
  end
end

Public Instance Methods

flush_completed() click to toggle source

TODO: Register `Datadog::Diagnostics::EnvironmentLogger.log!` TODO: as a flush_completed subscriber when the `TraceWriter` TODO: instantiation code is implemented.

# File lib/ddtrace/workers/trace_writer.rb, line 72
def flush_completed
  @flush_completed ||= FlushCompleted.new
end
flush_traces(traces) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 54
def flush_traces(traces)
  transport.send_traces(traces).tap do |response|
    flush_completed.publish(response)
  end
end
inject_hostname!(traces) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 60
def inject_hostname!(traces)
  traces.each do |trace|
    next if trace.first.nil?

    hostname = Datadog::Core::Environment::Socket.hostname
    trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
  end
end
perform(traces) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 27
def perform(traces)
  write_traces(traces)
end
process_traces(traces) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 44
def process_traces(traces)
  # Run traces through the processing pipeline
  traces = Pipeline.process!(traces)

  # Inject hostname if configured to do so
  inject_hostname!(traces) if Datadog.configuration.report_hostname

  traces
end
write(trace) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 31
def write(trace)
  write_traces([trace])
end
write_traces(traces) click to toggle source
# File lib/ddtrace/workers/trace_writer.rb, line 35
def write_traces(traces)
  traces = process_traces(traces)
  flush_traces(traces)
rescue StandardError => e
  Datadog.logger.error(
    "Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{Array(e.backtrace).first}"
  )
end