Repository: DataDog/datadog-agent
Pull request #34792: Add Docker e2e test for OTLP Ingest
Author: login: liustanley
Labels: name: changelog/no-changelog
description: No changelog entry needed
name: qa/no-code-change
description: No code change in Agent code requiring validation
name: medium review
description: PR review might take time
Created: 2025-03-05T18:23:20Z | Merged: 2025-03-05T21:41:00Z

<!--
* Contributors are encouraged to read our [CONTRIBUTING](/CONTRIBUTING.md) documentation.
* Both Contributor and Reviewer Checklists are available at https://datadoghq.dev/datadog-agent/guidelines/contributing/#pull-requests.
* The pull request:
  * Should only fix one issue or add one feature at a time.
  * Must update the test suite for the relevant functionality.
  * Should pass all status checks before being reviewed or merged.
* Commit titles should be prefixed with general area of pull request's change.
* Please fill the below sections if possible with relevant information or links.
-->
### What does this PR do?
Adds Docker e2e test for Agent OTLP Ingest. This PR includes a docker compose file `otlp_ingest_compose.yaml` for the Go calendar app, which is also used in Kubernetes tests. Traces, metrics, and logs are tested in `docker_pipelines_test.go`.

### Motivation
Follow up of https://github.com/DataDog/datadog-agent/issues/32947 to verify that OTLP ingest successfully starts in Docker environment.

### Describe how you validated your changes
<!--
Validate your changes before merge, ensuring that:
* Your PR is tested by static / unit / integrations / e2e tests
* Your PR description details which e2e tests cover your changes, if any
* The PR description contains details of how you validated your changes. If you validated changes manually and not through automated tests, add context on why automated tests did not fit your changes validation.

If you want additional validation by a second person, you can ask reviewers to do it. Describe how to set up an environment for manual tests in the PR description. Manual validation is expected to happen on every commit before merge.

Any manual validation step should then map to an automated test. Manual validation should not substitute automation, minus exceptions not supported by test tooling yet.
-->
E2E tests.

### Possible Drawbacks / Trade-offs

### Additional Notes
<!--
* Anything else we should know when reviewing?
* Include benchmarking information here whenever possible.
* Include info about alternatives that were considered and why the proposed
  version was chosen.
-->


Diff:
diff --git a/test/new-e2e/tests/otel/otlp-ingest/compose/otlp_ingest_compose.yaml b/test/new-e2e/tests/otel/otlp-ingest/compose/otlp_ingest_compose.yaml
new file mode 100644
index 000000000000..4f5ce4e405d4
--- /dev/null
+++ b/test/new-e2e/tests/otel/otlp-ingest/compose/otlp_ingest_compose.yaml
@@ -0,0 +1,26 @@
+version: "3.9"
+services:
+  agent:
+    container_name: datadog-agent
+    ports:
+      - "4317:4317"
+      - "4318:4318"
+  calendar:
+    container_name: calendar
+    ports:
+      - "9090:9090"
+    healthcheck:
+      test: curl --fail http://localhost:9090/calendar || exit 1
+      interval: 10s
+      timeout: 30s
+      retries: 3
+      start_period: 60s
+    depends_on:
+      agent:
+        condition: service_healthy
+    image: ghcr.io/datadog/apps-calendar-go:main
+    environment:
+      OTEL_SERVICE_NAME: calendar-rest-go
+      OTEL_EXPORTER_OTLP_ENDPOINT: http://datadog-agent:4317
+      OTEL_EXPORTER_OTLP_PROTOCOL: grpc
+      OTEL_RESOURCE_ATTRIBUTES: deployment.environment=e2e,service.version=1.0,custom.attribute=true
diff --git a/test/new-e2e/tests/otel/otlp-ingest/docker_pipelines_test.go b/test/new-e2e/tests/otel/otlp-ingest/docker_pipelines_test.go
new file mode 100644
index 000000000000..dec8a5f2f97d
--- /dev/null
+++ b/test/new-e2e/tests/otel/otlp-ingest/docker_pipelines_test.go
@@ -0,0 +1,62 @@
+// Unless explicitly stated otherwise all files in this repository are licensed
+// under the Apache License Version 2.0.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2016-present Datadog, Inc.
+
+package otlpingest
+
+import (
+	_ "embed"
+	"testing"
+
+	"github.com/DataDog/test-infra-definitions/components/datadog/dockeragentparams"
+	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
+
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e"
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments"
+	awsdocker "github.com/DataDog/datadog-agent/test/new-e2e/pkg/provisioners/aws/docker"
+	"github.com/DataDog/datadog-agent/test/new-e2e/tests/otel/utils"
+)
+
+type otlpIngestDockerTestSuite struct {
+	e2e.BaseSuite[environments.DockerHost]
+}
+
+//go:embed compose/otlp_ingest_compose.yaml
+var otlpIngestCompose string
+
+func TestOTLPIngestDocker(t *testing.T) {
+	t.Parallel()
+	e2e.Run(t,
+		&otlpIngestDockerTestSuite{},
+		e2e.WithProvisioner(
+			awsdocker.Provisioner(
+				awsdocker.WithAgentOptions(
+					dockeragentparams.WithLogs(),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT", pulumi.StringPtr("0.0.0.0:4317")),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT", pulumi.StringPtr("0.0.0.0:4318")),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_LOGS_ENABLED", pulumi.StringPtr("true")),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_OTLP_CONFIG_LOGS_ENABLED", pulumi.StringPtr("true")),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL", pulumi.StringPtr("false")),
+					dockeragentparams.WithAgentServiceEnvVariable("DD_OTLP_CONFIG_METRICS_RESOURCE_ATTRIBUTES_AS_TAGS", pulumi.StringPtr("true")),
+					dockeragentparams.WithExtraComposeManifest("calendar-rest-go", pulumi.String(otlpIngestCompose)),
+				))),
+	)
+}
+
+func (s *otlpIngestDockerTestSuite) SetupSuite() {
+	s.BaseSuite.SetupSuite()
+	utils.TestCalendarAppDocker(s)
+}
+
+func (s *otlpIngestDockerTestSuite) TestOTLPTraces() {
+	utils.TestTracesDocker(s)
+}
+
+func (s *otlpIngestDockerTestSuite) TestOTLPMetrics() {
+	utils.TestMetricsDocker(s)
+}
+
+func (s *otlpIngestDockerTestSuite) TestOTLPLogs() {
+	utils.TestLogsDocker(s)
+}
diff --git a/test/new-e2e/tests/otel/utils/docker_pipelines_utils.go b/test/new-e2e/tests/otel/utils/docker_pipelines_utils.go
new file mode 100644
index 000000000000..a8524eac6bd7
--- /dev/null
+++ b/test/new-e2e/tests/otel/utils/docker_pipelines_utils.go
@@ -0,0 +1,154 @@
+// Unless explicitly stated otherwise all files in this repository are licensed
+// under the Apache License Version 2.0.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2016-present Datadog, Inc.
+
+package utils
+
+import (
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+
+	"github.com/DataDog/datadog-agent/test/fakeintake/aggregator"
+	fakeintake "github.com/DataDog/datadog-agent/test/fakeintake/client"
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments"
+)
+
+// OTelDockerTestSuite is an interface for the OTel e2e test suite.
+type OTelDockerTestSuite interface {
+	T() *testing.T
+	Env() *environments.DockerHost
+}
+
+// TestCalendarAppDocker verifies the calendar app is sending telemetry for e2e tests
+func TestCalendarAppDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	s.T().Log("Waiting for calendar app to start")
+	// Wait for calendar app to start
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		logs, err := s.Env().FakeIntake.Client().FilterLogs(calendarService, fakeintake.WithMessageContaining(logBody))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, logs)
+	}, 30*time.Minute, 10*time.Second)
+}
+
+// TestTracesDocker tests that OTLP traces are received through OTel pipelines as expected
+func TestTracesDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	var traces []*aggregator.TracePayload
+	s.T().Log("Waiting for traces")
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		traces, err = s.Env().FakeIntake.Client().GetTraces()
+		if !assert.NoError(c, err) {
+			return
+		}
+		if !assert.NotEmpty(c, traces) {
+			return
+		}
+		trace := traces[0]
+		if !assert.NotEmpty(s.T(), trace.TracerPayloads) {
+			return
+		}
+		tp := trace.TracerPayloads[0]
+		if !assert.NotEmpty(s.T(), tp.Chunks) {
+			return
+		}
+		if !assert.NotEmpty(s.T(), tp.Chunks[0].Spans) {
+			return
+		}
+		assert.Equal(s.T(), calendarService, tp.Chunks[0].Spans[0].Service)
+	}, 5*time.Minute, 10*time.Second)
+	require.NotEmpty(s.T(), traces)
+	s.T().Log("Got traces", s.T().Name(), traces)
+
+	// Verify tags on traces and spans
+	tp := traces[0].TracerPayloads[0]
+	assert.Equal(s.T(), env, tp.Env)
+	assert.Equal(s.T(), version, tp.AppVersion)
+	require.NotEmpty(s.T(), tp.Chunks)
+	require.NotEmpty(s.T(), tp.Chunks[0].Spans)
+	spans := tp.Chunks[0].Spans
+	for _, sp := range spans {
+		assert.Equal(s.T(), calendarService, sp.Service)
+		assert.Equal(s.T(), env, sp.Meta["env"])
+		assert.Equal(s.T(), version, sp.Meta["version"])
+		assert.Equal(s.T(), customAttributeValue, sp.Meta[customAttribute])
+		assert.Equal(s.T(), "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp", sp.Meta["otel.library.name"])
+		assert.Equal(s.T(), traces[0].HostName, tp.Hostname)
+	}
+}
+
+// TestMetricsDocker tests that OTLP metrics are received through OTel pipelines as expected
+func TestMetricsDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	var metrics []*aggregator.MetricSeries
+	s.T().Log("Waiting for metrics")
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		tags := []string{fmt.Sprintf("service:%v", calendarService)}
+		metrics, err = s.Env().FakeIntake.Client().FilterMetrics("calendar-rest-go.api.counter", fakeintake.WithTags[*aggregator.MetricSeries](tags))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, metrics)
+	}, 5*time.Minute, 10*time.Second)
+	s.T().Log("Got metrics", s.T().Name(), metrics)
+
+	for _, metricSeries := range metrics {
+		tags := getTagMapFromSlice(s.T(), metricSeries.Tags)
+		assert.Equal(s.T(), calendarService, tags["service"])
+		assert.Equal(s.T(), env, tags["env"])
+		assert.Equal(s.T(), version, tags["version"])
+		assert.Equal(s.T(), customAttributeValue, tags[customAttribute])
+		hasHostResource := false
+		for _, resource := range metricSeries.Resources {
+			if resource.Type == "host" {
+				assert.NotNil(s.T(), resource.Name)
+				hasHostResource = true
+			}
+		}
+		assert.True(s.T(), hasHostResource)
+	}
+}
+
+// TestLogsDocker tests that OTLP logs are received through OTel pipelines as expected
+func TestLogsDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	var logs []*aggregator.Log
+	s.T().Log("Waiting for logs")
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		logs, err = s.Env().FakeIntake.Client().FilterLogs(calendarService, fakeintake.WithMessageContaining(logBody))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, logs)
+	}, 5*time.Minute, 10*time.Second)
+	for _, l := range logs {
+		s.T().Log("Got log", l)
+	}
+
+	require.NotEmpty(s.T(), logs)
+	for _, log := range logs {
+		tags := getTagMapFromSlice(s.T(), log.Tags)
+		attrs := make(map[string]interface{})
+		err = json.Unmarshal([]byte(log.Message), &attrs)
+		assert.NoError(s.T(), err)
+		for k, v := range attrs {
+			tags[k] = fmt.Sprint(v)
+		}
+		assert.Contains(s.T(), log.Message, logBody)
+		assert.Equal(s.T(), calendarService, tags["service"])
+		assert.Equal(s.T(), env, tags["env"])
+		assert.Equal(s.T(), version, tags["version"])
+		assert.Equal(s.T(), customAttributeValue, tags[customAttribute])
+		assert.NotNil(s.T(), log.HostName)
+	}
+}
diff --git a/test/new-e2e/tests/otel/utils/pipelines_utils.go b/test/new-e2e/tests/otel/utils/pipelines_utils.go
index 522867bcddae..02fd6659abfc 100644
--- a/test/new-e2e/tests/otel/utils/pipelines_utils.go
+++ b/test/new-e2e/tests/otel/utils/pipelines_utils.go
@@ -551,7 +551,7 @@ func createTelemetrygenJob(ctx context.Context, s OTelTestSuite, telemetry strin
 	require.NoError(s.T(), err, "Could not properly start job")
 }
 
-// TestCalendarApp tests that OTLP metrics are received through OTel pipelines as expected
+// TestCalendarApp starts the calendar app to send telemetry for e2e tests
 func TestCalendarApp(s OTelTestSuite, ust bool) {
 	ctx := context.Background()
 	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()


Reviews:
user: login: songy23
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-05T18:39:48Z
user: login: liustanley
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-05T18:46:07Z
user: login: songy23
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-05T18:49:15Z
user: login: songy23
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-05T18:50:40Z

Review comments:
diff_hunk: @@ -0,0 +1,154 @@
+// Unless explicitly stated otherwise all files in this repository are licensed
+// under the Apache License Version 2.0.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2016-present Datadog, Inc.
+
+package utils
+
+import (
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+
+	"github.com/DataDog/datadog-agent/test/fakeintake/aggregator"
+	fakeintake "github.com/DataDog/datadog-agent/test/fakeintake/client"
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments"
+)
+
+// OTelDockerTestSuite is an interface for the OTel e2e test suite.
+type OTelDockerTestSuite interface {
+	T() *testing.T
+	Env() *environments.DockerHost
+}
+
+// TestCalendarAppDocker verifies the calendar app is sending telemetry for e2e tests
+func TestCalendarAppDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	s.T().Log("Waiting for calendar app to start")
+	// Wait for calendar app to start
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		logs, err := s.Env().FakeIntake.Client().FilterLogs(calendarService, fakeintake.WithMessageContaining(logBody))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, logs)
+	}, 30*time.Minute, 10*time.Second)
+}
+
+// TestTracesDocker tests that OTLP traces are received through OTel pipelines as expected
+func TestTracesDocker(s OTelDockerTestSuite) {
path: test/new-e2e/tests/otel/utils/docker_pipelines_utils.go
user: login: songy23
body: Curious what are the differences between these funcs and the ones in pipelines_utils, other than container tags? If most parts are the same I'd prefer to refactor and reuse pipelines_utils
created_at: 2025-03-05T18:39:48Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,154 @@
+// Unless explicitly stated otherwise all files in this repository are licensed
+// under the Apache License Version 2.0.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2016-present Datadog, Inc.
+
+package utils
+
+import (
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+
+	"github.com/DataDog/datadog-agent/test/fakeintake/aggregator"
+	fakeintake "github.com/DataDog/datadog-agent/test/fakeintake/client"
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments"
+)
+
+// OTelDockerTestSuite is an interface for the OTel e2e test suite.
+type OTelDockerTestSuite interface {
+	T() *testing.T
+	Env() *environments.DockerHost
+}
+
+// TestCalendarAppDocker verifies the calendar app is sending telemetry for e2e tests
+func TestCalendarAppDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	s.T().Log("Waiting for calendar app to start")
+	// Wait for calendar app to start
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		logs, err := s.Env().FakeIntake.Client().FilterLogs(calendarService, fakeintake.WithMessageContaining(logBody))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, logs)
+	}, 30*time.Minute, 10*time.Second)
+}
+
+// TestTracesDocker tests that OTLP traces are received through OTel pipelines as expected
+func TestTracesDocker(s OTelDockerTestSuite) {
path: test/new-e2e/tests/otel/utils/docker_pipelines_utils.go
user: login: liustanley
body: Container tags are the main difference, but the test suite type is also different between kubernetes and docker (`environments.DockerHost` vs `environments.Kubernetes`). I'm not sure if there would be a clean way to refactor this?
created_at: 2025-03-05T18:46:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,154 @@
+// Unless explicitly stated otherwise all files in this repository are licensed
+// under the Apache License Version 2.0.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2016-present Datadog, Inc.
+
+package utils
+
+import (
+	"encoding/json"
+	"fmt"
+	"testing"
+	"time"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/stretchr/testify/require"
+
+	"github.com/DataDog/datadog-agent/test/fakeintake/aggregator"
+	fakeintake "github.com/DataDog/datadog-agent/test/fakeintake/client"
+	"github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments"
+)
+
+// OTelDockerTestSuite is an interface for the OTel e2e test suite.
+type OTelDockerTestSuite interface {
+	T() *testing.T
+	Env() *environments.DockerHost
+}
+
+// TestCalendarAppDocker verifies the calendar app is sending telemetry for e2e tests
+func TestCalendarAppDocker(s OTelDockerTestSuite) {
+	err := s.Env().FakeIntake.Client().FlushServerAndResetAggregators()
+	require.NoError(s.T(), err)
+
+	s.T().Log("Waiting for calendar app to start")
+	// Wait for calendar app to start
+	require.EventuallyWithT(s.T(), func(c *assert.CollectT) {
+		logs, err := s.Env().FakeIntake.Client().FilterLogs(calendarService, fakeintake.WithMessageContaining(logBody))
+		assert.NoError(c, err)
+		assert.NotEmpty(c, logs)
+	}, 30*time.Minute, 10*time.Second)
+}
+
+// TestTracesDocker tests that OTLP traces are received through OTel pipelines as expected
+func TestTracesDocker(s OTelDockerTestSuite) {
path: test/new-e2e/tests/otel/utils/docker_pipelines_utils.go
user: login: songy23
body: Ack, not a big deal, if it's not trivial to refactor I'm ok with leaving it as is
created_at: 2025-03-05T18:49:15Z
author_association: MEMBER
diff_hunk: @@ -0,0 +1,26 @@
+version: "3.9"
+services:
+  agent:
+    container_name: datadog-agent
+    ports:
+      - "4317:4317"
+      - "4318:4318"
path: test/new-e2e/tests/otel/otlp-ingest/compose/otlp_ingest_compose.yaml
user: login: songy23
body: I was a bit surprised that this wasn't impacted by https://github.com/DataDog/datadog-agent/issues/32947, maybe docker compose is different - which is a good thing
created_at: 2025-03-05T18:50:36Z
author_association: MEMBER

PR comments:
user: login: agent-platform-auto-pr[bot]
created_at: 2025-03-05T18:43:44Z
body: 
[Fast Unit Tests Report]

On pipeline [57844202](https://gitlab.ddbuild.io/DataDog/datadog-agent/-/pipelines/57844202) ([CI Visibility](https://app.datadoghq.com/ci/pipeline-executions?query=ci_level%3Apipeline%20%40ci.pipeline.name%3ADataDog%2Fdatadog-agent%20%40ci.pipeline.id%3A57844202&fromUser=false&index=cipipeline)). The following jobs did not run any unit tests:

<details>
<summary>Jobs:</summary>

  - tests_deb-arm64-py3
  - tests_deb-x64-py3
  - tests_flavor_dogstatsd_deb-x64
  - tests_flavor_heroku_deb-x64
  - tests_flavor_iot_deb-x64
  - tests_rpm-arm64-py3
  - tests_rpm-x64-py3
  - tests_windows-x64
</details>

If you modified Go files and expected unit tests to run in these jobs, please double check the job logs. If you think tests should have been executed reach out to #agent-devx-help
author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-03-05T18:43:50Z
body: ## Uncompressed package size comparison

Comparison with [ancestor](https://github.com/DataDog/datadog-agent/commit/7877501df1d24ee2400938dead31bac9d5035309) `7877501df1d24ee2400938dead31bac9d5035309`


<details>
  <summary> Diff per package </summary>

|package|diff|status|size|ancestor|threshold|
|--|--|--|--|--|--|
|datadog-agent-amd64-deb|0.00MB|✅|815.18MB|815.18MB|0.50MB|
|datadog-agent-x86_64-rpm|0.00MB|✅|824.98MB|824.98MB|0.50MB|
|datadog-agent-x86_64-suse|0.00MB|✅|824.98MB|824.98MB|0.50MB|
|datadog-agent-arm64-deb|0.00MB|✅|806.06MB|806.06MB|0.50MB|
|datadog-agent-aarch64-rpm|0.00MB|✅|815.83MB|815.83MB|0.50MB|
|datadog-dogstatsd-amd64-deb|0.00MB|✅|39.46MB|39.46MB|0.50MB|
|datadog-dogstatsd-x86_64-rpm|0.00MB|✅|39.54MB|39.54MB|0.50MB|
|datadog-dogstatsd-x86_64-suse|0.00MB|✅|39.54MB|39.54MB|0.50MB|
|datadog-dogstatsd-arm64-deb|0.00MB|✅|37.99MB|37.99MB|0.50MB|
|datadog-heroku-agent-amd64-deb|0.00MB|✅|440.86MB|440.86MB|0.50MB|
|datadog-iot-agent-amd64-deb|0.00MB|✅|62.14MB|62.14MB|0.50MB|
|datadog-iot-agent-x86_64-rpm|0.00MB|✅|62.21MB|62.21MB|0.50MB|
|datadog-iot-agent-x86_64-suse|0.00MB|✅|62.20MB|62.20MB|0.50MB|
|datadog-iot-agent-arm64-deb|0.00MB|✅|59.36MB|59.36MB|0.50MB|
|datadog-iot-agent-aarch64-rpm|0.00MB|✅|59.43MB|59.43MB|0.50MB|

</details>

## Decision
✅ Passed



author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-03-05T18:47:12Z
body: ## Test changes on VM

Use this command from [test-infra-definitions](https://github.com/DataDog/test-infra-definitions) to manually test this PR changes on a VM:
```sh
inv aws.create-vm --pipeline-id=57844202 --os-family=ubuntu
```
Note: This applies to commit **3f5d031f**
author_association: CONTRIBUTOR
user: login: agent-platform-auto-pr[bot]
created_at: 2025-03-05T18:48:59Z
body: ## Static quality checks ✅

Please find below the results from static quality gates


<details>
<summary>Successful checks</summary>

### Info

|Result|Quality gate|On disk size|On disk size limit|On wire size|On wire size limit|
|----|----|----|----|----|----|
|✅|static_quality_gate_agent_deb_amd64|788.89MiB|801.8MiB|192.37MiB|202.62MiB|
|✅|static_quality_gate_agent_deb_arm64|780.16MiB|793.14MiB|174.4MiB|184.51MiB|
|✅|static_quality_gate_agent_rpm_amd64|788.81MiB|801.79MiB|194.33MiB|205.03MiB|
|✅|static_quality_gate_agent_rpm_arm64|780.11MiB|793.09MiB|175.92MiB|186.44MiB|
|✅|static_quality_gate_agent_suse_amd64|788.92MiB|801.81MiB|194.33MiB|205.03MiB|
|✅|static_quality_gate_agent_suse_arm64|780.05MiB|793.14MiB|175.92MiB|186.44MiB|
|✅|static_quality_gate_dogstatsd_deb_amd64|37.71MiB|47.67MiB|9.78MiB|19.78MiB|
|✅|static_quality_gate_dogstatsd_deb_arm64|36.3MiB|46.27MiB|8.48MiB|18.49MiB|
|✅|static_quality_gate_dogstatsd_rpm_amd64|37.71MiB|47.67MiB|9.79MiB|19.79MiB|
|✅|static_quality_gate_dogstatsd_suse_amd64|37.71MiB|47.67MiB|9.79MiB|19.79MiB|
|✅|static_quality_gate_iot_agent_deb_amd64|59.33MiB|69.0MiB|14.91MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_deb_arm64|56.69MiB|66.4MiB|12.87MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_rpm_amd64|59.33MiB|69.0MiB|14.93MiB|24.8MiB|
|✅|static_quality_gate_iot_agent_rpm_arm64|56.69MiB|66.4MiB|12.87MiB|22.8MiB|
|✅|static_quality_gate_iot_agent_suse_amd64|59.33MiB|69.0MiB|14.93MiB|24.8MiB|
|✅|static_quality_gate_docker_agent_amd64|873.57MiB|886.12MiB|293.91MiB|304.21MiB|
|✅|static_quality_gate_docker_agent_arm64|888.13MiB|900.79MiB|280.13MiB|290.47MiB|
|✅|static_quality_gate_docker_agent_jmx_amd64|1.05GiB|1.06GiB|369.02MiB|379.33MiB|
|✅|static_quality_gate_docker_agent_jmx_arm64|1.05GiB|1.06GiB|351.21MiB|361.55MiB|
|✅|static_quality_gate_docker_dogstatsd_amd64|45.86MiB|55.78MiB|17.3MiB|27.28MiB|
|✅|static_quality_gate_docker_dogstatsd_arm64|44.47MiB|54.45MiB|16.17MiB|26.16MiB|
|✅|static_quality_gate_docker_cluster_agent_amd64|265.09MiB|274.78MiB|106.42MiB|116.28MiB|
|✅|static_quality_gate_docker_cluster_agent_arm64|281.02MiB|290.82MiB|101.22MiB|111.12MiB|

</details>

author_association: CONTRIBUTOR
user: login: cit-pr-commenter[bot]
created_at: 2025-03-05T20:36:36Z
body: ## Regression Detector

# Regression Detector Results

[Metrics dashboard](https://app.datadoghq.com/dashboard/ykh-ua8-vcu/SMP-Regression-Detector-Metrics?fromUser=true&refresh_mode=paused&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false)  
[Target profiles](https://app.datadoghq.com/profiling/explorer?query=env%3Asingle-machine-performance%20service%3Adatadog-agent%20job_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_t=count&fromUser=false&viz=stream&start=1741197946000&end=1741209346000&paused=true)  
Run ID: a2e67faa-354f-41f5-a918-b658e9676617

Baseline: 7877501df1d24ee2400938dead31bac9d5035309
Comparison: 3f5d031fd51d8bb8a64fd32888239411cd3d9190
[Diff](7877501df1d24ee2400938dead31bac9d5035309...3f5d031fd51d8bb8a64fd32888239411cd3d9190)


## Optimization Goals: ✅ No significant changes detected


<details>
<summary><h2>
Fine details of change detection per experiment
</h2></summary>

| perf | experiment                                   | goal               | Δ mean % | Δ mean % CI    | trials | links                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|------|----------------------------------------------|--------------------|----------|----------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ➖   | uds_dogstatsd_to_api_cpu                     | % cpu utilization  | +2.40    | [+1.51, +3.30] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api_cpu%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                   |
| ➖   | quality_gate_logs                            | % cpu utilization  | +0.54    | [-2.35, +3.43] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_logs%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                          |
| ➖   | file_to_blackhole_0ms_latency                | egress throughput  | +0.01    | [-0.78, +0.81] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                              |
| ➖   | file_to_blackhole_0ms_latency_http2          | egress throughput  | +0.01    | [-0.75, +0.77] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http2%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                        |
| ➖   | file_to_blackhole_100ms_latency              | egress throughput  | +0.01    | [-0.70, +0.72] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_100ms_latency%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                            |
| ➖   | uds_dogstatsd_to_api                         | ingress throughput | +0.00    | [-0.30, +0.30] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Auds_dogstatsd_to_api%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                       |
| ➖   | tcp_dd_logs_filter_exclude                   | ingress throughput | -0.00    | [-0.02, +0.02] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_dd_logs_filter_exclude%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                 |
| ➖   | file_to_blackhole_300ms_latency              | egress throughput  | -0.01    | [-0.64, +0.62] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_300ms_latency%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                            |
| ➖   | file_to_blackhole_0ms_latency_http1          | egress throughput  | -0.02    | [-0.85, +0.82] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_0ms_latency_http1%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                        |
| ➖   | file_to_blackhole_500ms_latency              | egress throughput  | -0.03    | [-0.81, +0.75] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_500ms_latency%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                            |
| ➖   | file_to_blackhole_1000ms_latency             | egress throughput  | -0.07    | [-0.84, +0.70] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                           |
| ➖   | quality_gate_idle                            | memory utilization | -0.27    | [-0.31, -0.23] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false)                           |
| ➖   | tcp_syslog_to_blackhole                      | ingress throughput | -0.39    | [-0.48, -0.30] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Atcp_syslog_to_blackhole%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                    |
| ➖   | file_tree                                    | memory utilization | -0.42    | [-0.47, -0.37] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_tree%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                                                                  |
| ➖   | file_to_blackhole_1000ms_latency_linear_load | egress throughput  | -0.45    | [-0.93, +0.02] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Afile_to_blackhole_1000ms_latency_linear_load%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false)                                                                                                                                                                                                                                                                                                                                               |
| ➖   | quality_gate_idle_all_features               | memory utilization | -0.72    | [-0.75, -0.70] | 1      | [Logs](https://app.datadoghq.com/logs?query=experiment%3Aquality_gate_idle_all_features%20run_id%3Aa2e67faa-354f-41f5-a918-b658e9676617&agg_m=count&agg_m_source=base&agg_q=%40span.url&agg_q_source=base&agg_t=count&fromUser=true&index=single-machine-performance-target-logs&messageDisplay=inline&refresh_mode=paused&storage=hot&stream_sort=time%2Cdesc&top_n=100&top_o=top&viz=stream&x_missing=true&from_ts=1741197946000&to_ts=1741209346000&live=false) [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false) |
</details>


<details>
<summary><h2>
Bounds Checks: ✅ Passed
</h2></summary>

| perf | experiment                                   | bounds_check_name  | replicates_passed | links                                                                                                                                                                                                                                                                                                                                                       |
|------|----------------------------------------------|--------------------|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ✅   | file_to_blackhole_0ms_latency                | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_0ms_latency                | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_0ms_latency_http1          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_0ms_latency_http1          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_0ms_latency_http2          | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_0ms_latency_http2          | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_1000ms_latency             | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_1000ms_latency_linear_load | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_100ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_100ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_300ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_300ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_500ms_latency              | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | file_to_blackhole_500ms_latency              | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | quality_gate_idle                            | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false)              |
| ✅   | quality_gate_idle                            | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false)              |
| ✅   | quality_gate_idle_all_features               | intake_connections | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false) |
| ✅   | quality_gate_idle_all_features               | memory_usage       | 10/10             | [bounds checks dashboard](https://app.datadoghq.com/dashboard/vz3-jd5-bdi?fromUser=true&refresh_mode=paused&tpl_var_experiment%5B0%5D=quality_gate_idle_all_features&tpl_var_job_id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&tpl_var_run-id%5B0%5D=a2e67faa-354f-41f5-a918-b658e9676617&view=spans&from_ts=1741205146000&to_ts=1741205746000&live=false) |
| ✅   | quality_gate_logs                            | intake_connections | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | quality_gate_logs                            | lost_bytes         | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
| ✅   | quality_gate_logs                            | memory_usage       | 10/10             |                                                                                                                                                                                                                                                                                                                                                             |
</details>


<details>
<summary><h2>
Explanation
</h2></summary>

**Confidence level:** 90.00%
**Effect size tolerance:** |Δ mean %| ≥ 5.00%

Performance changes are noted in the **perf** column of each table:

* ✅ = significantly better comparison variant performance
* ❌ = significantly worse comparison variant performance
* ➖ = no significant change in performance

A regression test is an A/B test of target performance in a repeatable rig, where "performance" is measured as "comparison variant minus baseline variant" for an optimization goal (e.g., ingress throughput). Due to intrinsic variability in measuring that goal, we can only estimate its mean value for each experiment; we report uncertainty in that value as a 90.00% confidence interval denoted "Δ mean % CI".

For each experiment, we decide whether a change in performance is a "regression" -- a change worth investigating further -- if all of the following criteria are true:

1. Its estimated |Δ mean %| ≥ 5.00%, indicating the change is big enough to merit a closer look.

2. Its 90.00% confidence interval "Δ mean % CI" does not contain zero, indicating that *if our statistical model is accurate*, there is at least a 90.00% chance there is a difference in performance between baseline and comparison variants.

3. Its configuration does not mark it "erratic".
</details>

## CI Pass/Fail Decision

✅ **Passed.** All Quality Gates passed.

- **quality_gate_idle**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_idle_all_features**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **intake_connections**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **memory_usage**: 10/10 replicas passed. Gate passed.
- **quality_gate_logs**, bounds check **lost_bytes**: 10/10 replicas passed. Gate passed.
author_association: NONE
user: login: liustanley
created_at: 2025-03-05T21:11:16Z
body: /merge
author_association: CONTRIBUTOR
user: login: dd-devflow[bot]
created_at: 2025-03-05T21:11:20Z
body: <!-- "FeedbackWorkflowId":"46ec03b4-d4f9-4561-9c19-8b3f7db86cc3_36" -->
[View all feedbacks in Devflow UI.](https://devflow.static-app.us1.prod.dog/logs/46ec03b4-d4f9-4561-9c19-8b3f7db86cc3_36)
`2025-03-05 21:11:19 UTC` :information_source: Start processing command `/merge`

---
`2025-03-05 21:11:23 UTC` :information_source: **MergeQueue:** pull request added to the queue

The median merge time in `main` is 30m.

---
`2025-03-05 21:41:03 UTC` :information_source: **MergeQueue:** This merge request was merged

author_association: NONE