Class: Datadog::CI::TestVisibility::Transport

Inherits:
Object
  • Object
show all
Defined in:
lib/datadog/ci/test_visibility/transport.rb

Constant Summary collapse

DEFAULT_MAX_PAYLOAD_SIZE =

CI test cycle intake’s limit is 5.1MB uncompressed We will use a bit more conservative value 5MB

5 * 1024 * 1024

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api:, dd_env: nil, serializers_factory: Datadog::CI::TestVisibility::Serializers::Factories::TestLevel, max_payload_size: DEFAULT_MAX_PAYLOAD_SIZE) ⇒ Transport

Returns a new instance of Transport.



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/datadog/ci/test_visibility/transport.rb', line 26

def initialize(
  api:,
  dd_env: nil,
  serializers_factory: Datadog::CI::TestVisibility::Serializers::Factories::TestLevel,
  max_payload_size: DEFAULT_MAX_PAYLOAD_SIZE
)
  @serializers_factory = serializers_factory
  @max_payload_size = max_payload_size
  @dd_env = dd_env
  @api = api
end

Instance Attribute Details

#apiObject (readonly)

Returns the value of attribute api.



21
22
23
# File 'lib/datadog/ci/test_visibility/transport.rb', line 21

def api
  @api
end

#dd_envObject (readonly)

Returns the value of attribute dd_env.



21
22
23
# File 'lib/datadog/ci/test_visibility/transport.rb', line 21

def dd_env
  @dd_env
end

#max_payload_sizeObject (readonly)

Returns the value of attribute max_payload_size.



21
22
23
# File 'lib/datadog/ci/test_visibility/transport.rb', line 21

def max_payload_size
  @max_payload_size
end

#serializers_factoryObject (readonly)

Returns the value of attribute serializers_factory.



21
22
23
# File 'lib/datadog/ci/test_visibility/transport.rb', line 21

def serializers_factory
  @serializers_factory
end

Instance Method Details

#send_traces(traces) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/datadog/ci/test_visibility/transport.rb', line 38

def send_traces(traces)
  return [] if traces.nil? || traces.empty?

  Datadog.logger.debug { "Sending #{traces.count} traces..." }

  encoded_events = encode_traces(traces)
  if encoded_events.empty?
    Datadog.logger.debug { "Empty encoded events list, skipping send" }
    return []
  end

  responses = []
  Datadog::Core::Chunker.chunk_by_size(encoded_events, max_payload_size).map do |chunk|
    encoded_payload = pack_events(chunk)
    Datadog.logger.debug do
      "Send chunk of #{chunk.count} events; payload size #{encoded_payload.size}"
    end

    response = send_payload(encoded_payload)

    responses << response
  end

  responses
end