Class: Datadog::Transport::Traces::Chunker

Inherits:
Object
  • Object
show all
Defined in:
lib/ddtrace/transport/traces.rb

Overview

Traces chunker

Constant Summary collapse

DEFAULT_MAX_PAYLOAD_SIZE =

Trace agent limit payload size of 10 MiB (since agent v5.11.0): github.com/DataDog/datadog-agent/blob/6.14.1/pkg/trace/api/api.go#L46

We set the value to a conservative 5 MiB, in case network speed is slow.

5 * 1024 * 1024

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(encoder, max_size: DEFAULT_MAX_PAYLOAD_SIZE) ⇒ Chunker

Single traces larger than max_size will be discarded.

Parameters:

  • encoder (Datadog::Encoding::Encoder)
  • max_size (String) (defaults to: DEFAULT_MAX_PAYLOAD_SIZE)

    maximum acceptable payload size



48
49
50
51
# File 'lib/ddtrace/transport/traces.rb', line 48

def initialize(encoder, max_size: DEFAULT_MAX_PAYLOAD_SIZE)
  @encoder = encoder
  @max_size = max_size
end

Instance Attribute Details

#encoderObject (readonly)

Returns the value of attribute encoder.



41
42
43
# File 'lib/ddtrace/transport/traces.rb', line 41

def encoder
  @encoder
end

#max_sizeObject (readonly)

Returns the value of attribute max_size.



41
42
43
# File 'lib/ddtrace/transport/traces.rb', line 41

def max_size
  @max_size
end

Instance Method Details

#encode_in_chunks(traces) ⇒ Enumerable[Array[Bytes,Integer]]

Encodes a list of traces in chunks. Before serializing, all traces are normalized. Trace nesting is not changed.

Parameters:

  • traces (Enumerable<Trace>)

    list of traces

Returns:

  • (Enumerable[Array[Bytes,Integer]])

    list of encoded chunks: each containing a byte array and number of traces



59
60
61
62
63
64
65
# File 'lib/ddtrace/transport/traces.rb', line 59

def encode_in_chunks(traces)
  encoded_traces = traces.map { |t| encode_one(t) }.reject(&:nil?)

  Datadog::Chunker.chunk_by_size(encoded_traces, max_size).map do |chunk|
    [encoder.join(chunk), chunk.size]
  end
end