class OpenTelemetry::Exporters::Datadog::Exporter

SpanExporter allows different tracing services to export recorded data for sampled spans in their own format.

To export data an exporter MUST be registered to the {TracerProvider} using a {DatadogSpanProcessorr}.

Constants

DEFAULT_AGENT_URL
DEFAULT_SERVICE_NAME
FAILURE
SUCCESS

Public Class Methods

new(service_name: nil, agent_url: nil, env: nil, version: nil, tags: nil) click to toggle source
# File lib/opentelemetry/exporters/datadog/exporter.rb, line 28
def initialize(service_name: nil, agent_url: nil, env: nil, version: nil, tags: nil)
  @shutdown = false
  @agent_url = agent_url || ENV.fetch('DD_TRACE_AGENT_URL', DEFAULT_AGENT_URL)
  @service = service_name || ENV.fetch('DD_SERVICE', DEFAULT_SERVICE_NAME)

  @env = env || ENV.fetch('DD_ENV', nil)
  @version = version || ENV.fetch('DD_VERSION', nil)
  @tags = tags || ENV.fetch('DD_TAGS', nil)

  @agent_writer = get_writer(@agent_url)

  @span_encoder = SpanEncoder.new
end

Public Instance Methods

export(spans) click to toggle source

Called to export sampled {Span}s.

@param [Enumerable<Span>] spans the list of sampled {Span}s to be

exported.

@return [Integer] the result of the export.

# File lib/opentelemetry/exporters/datadog/exporter.rb, line 47
def export(spans)
  return FAILURE if @shutdown

  if @agent_writer
    datadog_spans = @span_encoder.translate_to_datadog(spans, @service, @env, @version, @tags)
    @agent_writer.write(datadog_spans)
    SUCCESS
  else
    OpenTelemetry.logger.debug('Agent writer not set')
    FAILURE
  end
end
shutdown(timeout: nil) click to toggle source

Called when {TracerProvider#shutdown} is called, if this exporter is registered to a {TracerProvider} object.

# File lib/opentelemetry/exporters/datadog/exporter.rb, line 62
def shutdown(timeout: nil)
  @shutdown = true
end

Private Instance Methods

get_writer(uri) click to toggle source
# File lib/opentelemetry/exporters/datadog/exporter.rb, line 68
def get_writer(uri)
  uri_parsed = URI.parse(uri)

  if %w[http https].include?(uri_parsed.scheme)
    hostname = uri_parsed.hostname
    port = uri_parsed.port

    adapter = ::Datadog::Transport::HTTP::Adapters::Net.new(hostname, port)

    transport = ::Datadog::Transport::HTTP.default do |t|
      t.adapter adapter
    end

    ::Datadog::Writer.new(transport: transport)
  elsif uri_parsed.to_s.index('/sock')
    # handle uds path
    transport = ::Datadog::Transport::HTTP.default do |t|
      t.adapter :unix, uri_parsed.to_s
    end

    ::Datadog::Writer.new(transport: transport)
  else
    OpenTelemetry.logger.warn('only http/https and uds is supported at this time')
  end
end